gunicorn とは Ruby の unicorn を元に開発された Python 用の HTTP サーバです。この gunicorn を使って web.py 製のアプリケーションを動かすことができたのでその備忘録。
後々 nginx と連携させて自作の Web アプリをデプロイしたいなーとか思ってます。
今回構築した環境は
- OS: Mac OS X Snow Leopard
- Python: 2.6.6 (MacPortsより)
- web.py: 0.33 (easy_install にて)
- gunicorn: 0.8.1 (easy_install にて)
web.py と gunicorn はそれぞれ
$ sudo easy_install-2.6 web.py
$ sudo easy_install-2.6 gunicorn
でインストールしました。
また、MacPorts からインストールした easy_install を使った場合、gunicorn は /opt/local/Library/Frameworks/Python.framework/Versions/2.6/bin にインストールされます。PATH が通ってない場合はあらかじめ設定しておく必要があります。
今回使ったソースは web.py の公式でも紹介されている 'Hello World!' アプリです。
app.py
#!/usr/bin/env python
# -*- coding:utf-8 -*-
import web
urls = (
'/(.*)', 'hello'
)
app = web.application(urls, globals())
class hello:
def GET(self, name):
if not name:
name = 'World'
return 'Hello, ' + name + '!'
if __name__ == '__main__':
app.run()
このソースを一行書き換えれば gunicorn (というか WSGI)への対応完了です。
app.py
#!/usr/bin/env python
# -*- coding:utf-8 -*-
import web
urls = (
'/(.*)', 'hello'
)
app = web.application(urls, globals()).wsgifunc() # <- .wsgifunc() を追加!
class hello:
def GET(self, name):
if not name:
name = 'World'
return 'Hello, ' + name + '!'
if __name__ == '__main__':
app.run()
次に、gunicorn での起動方法です。app.py が置いてあるディレクトリで以下のコマンドを実行します。
$ gunicorn app:app
2010-09-26 22:23:50 [93920] [INFO] Arbiter booted
2010-09-26 22:23:50 [93920] [INFO] Listening at: http://127.0.0.1:8000
2010-09-26 22:23:50 [93922] [INFO] Worker spawned (pid: 93922)
これで起動完了です。 gunicorn に渡す引数は、(モジュール名):(変数名) です。今回の場合は app.py でモジュール名が app、wsgifunc()の返り値を代入してる変数名が app なので、app:app となります。
ファイルの変更が動的に反映されるので、開発時にはかなり便利ですね。
次は nginx と連携して動作させる設定を行なってみようと思います。
初めてのPython 第3版
posted with amazlet at 10.09.23
Mark Lutz
オライリージャパン
売り上げランキング: 57132
オライリージャパン
売り上げランキング: 57132
0 件のコメント:
コメントを投稿