buildout と PasteDeploy を使って mod_wsgi で動かすための wsgi ファイルを作る
というわけでメモ。
今回ははてダ使ったよ。
こんなもの を作っていて、タイトル通りのことをやりたかったので、試行錯誤したメモ。
という時にどうするか、という話。
buildout を使っていることが前提なので setup.py とか書いているはず。
なのでそこら辺はすっ飛ばす。
PasteDeploy の設定とか
buildout で管理しているディレクトリ直下に app.ini とか作って以下のように書く。
[app:main] paste.app_factory = mypackage:app_factory
こう書くと mypackage モジュール(or パッケージ) の app_factory がアプリケーションファクトリになる。
アプリケーションファクトリとか PasteDeploy については あおだぐ先生の解説 を見てね。
buildout の設定
で、この PasteDeploy の設定から WSGI ファイルを作りたい。
そこで使うのが collective.recipe.modwsgi というレシピ。
これを使うには buildout.cfg で以下のように設定する。
[mod_wsgi] recipe = collective.recipe.modwsgi eggs = ${env:eggs} PasteDeploy config-file = ${buildout:directory}/app.ini app_name = main
config-file はさっき書いた app.ini を指定する。 ${buildout:directory} は buildout で管理しているディレクトリのパスになる。
app_name はさっき書いた app:main を指定する。
で、 buildout する。
と、以下のような感じのファイルが parts/mod_wsgi/wsgi に生成される。
import ConfigParser import sys syspaths = [ '/home/shoma/.buildout/eggs/zc.recipe.egg-2.0.0a3-py2.7.egg', '/home/shoma/src/mypackage', '/home/shoma/.buildout/eggs/PasteDeploy-1.5.0-py2.7.egg', '/home/shoma/.buildout/eggs/distribute-0.6.32-py2.7.egg', '/usr/lib/python2.7/dist-packages', '/usr/local/lib/python2.7/dist-packages/Pygments-1.5-py2.7.egg', '/home/shoma/.buildout/eggs/SQLAlchemy-0.7.9-py2.7-linux-x86_64.egg', '/home/shoma/.buildout/eggs/zc.buildout-1.6.3-py2.7.egg', ] for path in reversed(syspaths): if path not in sys.path: sys.path[0:0]=[path] from paste.deploy import loadapp if sys.version_info >= (2, 6): from logging.config import fileConfig else: from paste.script.util.logging_config import fileConfig configfile = "/home/shoma/src/mypackag/app.ini" try: fileConfig(configfile) except ConfigParser.NoSectionError: pass application = loadapp("config:" + configfile, name="main")