uWSGIのインストール
まずは uWSGI のインストール。
takatoh@nightschool $ sudo pip install uwsgi
Successfully installed uwsgi とでて完了。
簡単なアプリでテスト
$HOME/w/test/app.py を次のように書いてテスト。
from flask import Flask app = Flask(__name__) @app.route('/') def hello_worls(): return 'Hello, world.' if __name__ == '__main__': app.run()
takatoh@nightschool $ pwd /home/takatoh takatoh@nightschool $ uwsgi --http :9090 -H w/test/env --wsgi-file w/test/app.py --callable app
http://localhost:9090/ にブラウザでアクセスすると、無事 Hello, world. と表示されたのでOK。
-H オプションは virtualenv の環境のディレクトリを指定している。
書籍管理アプリ Bruschetta を動かす
上で結構すんなり動いたので、簡単にいくかと思ったらそうでもなかった。試行錯誤の上、次のようにして起動に成功。
takatoh@nightschool $ uwsgi --http :9090 --wsgi-file /home/takatoh/w/bruschetta/manage.py --python-path /home/takatoh/w/bruschetta --callable app -H /home/takatoh/w/bruschetta/env
ハマった点は次のとおり:
- アプリのディレクトリを
--python-path
で指定しないとダメ --wsgi-file
はフルパスで指定しないとダメ--callable
は Flask のインスタンスを代入した変数名を指定
--callable
について補足。アプリの起動ファイル manage.py は次のようになっている。
from __future__ import print_function from flask.ext.script import Manager from bruschetta import app, db manager = Manager(app) @manager.command def init_db(): db.create_all() if __name__ == '__main__': manager.run()
なので、最初は --callable manager
としたけどダメだった。Flask のインスタンスはあくまでも app なので、それを指定しなきゃいけないようだ。
というわけで、無事動いたので今日はここまで。明日はデーモンとして動くようにしてみよう。