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 なので、それを指定しなきゃいけないようだ。
というわけで、無事動いたので今日はここまで。明日はデーモンとして動くようにしてみよう。