uWSGI+virtualenv+Flask

·2 分で読めます

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:が詳しい。