Pythonで今一番熱そうなWSGIコンテナのuWSGIというものをインストールしてみたんだけど、virtualenvと組み合わせた時にちょっとはまったのでメモ。
前提
- Pythonは2.6
- virtualenv(wrapper)を使って /usr/local/virtualenvs 配下に flask という環境を作っている
- flask には Flask や Jinja2 などアプリの実行に必要なものがインストールされている
- 実行するアプリは /var/www/wiki-converter にディプロイされている(wiki-converterのソース)
uWSGIのインストール
$ workon flask $ pip install uwsgi
でいける。
uWSGIの起動
まずは本格的なアプリを起動する前にQuickstartに書いてあるhello world的なものを試しみる。
# /var/www/hello.py def application(env, start_response): start_response('200 OK', [('Content-Type','text/html')]) return "Hello World"
起動
$ uwsgi --http :9090 --wsgi-file /var/www/hello.py
これでブラウザから localhost:9090 にアクセスして"Hello World"が表示されればうまくいっている。
次はFlaskアプリで試してみる。
$ uwsgi --http :9090 -H /usr/local/virtualenvs/flask --python-path /var/www/wiki-converter -w wiki_converter:app
で起動できる。
- -H でvirtualenv な環境のディレクトリを指定
- --python-pathにアプリがあるディレクトリを指定
しているのがミソ。-Hがない場合 flask が見つからなくて
ImportError: No module named flask unable to load app mountpoint
というエラーが出てuwsgiがうまく起動できないので注意!
なお、uWSGIはnginxと組み合わせてよく使われるらしい。nginxとの組み合わせについてはCentOSでnginx + uwsgi + Djangoを試してみた « taichino.com:が詳しい。