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")
#kabepy Advent Calendar 12日目 靴についてでも書いてみる
さて、12日目です、
結局また Sphinx で書いたので同じように上げました。
なんかもうなんのためにはてダ使ってるんでしょうね。
Bitbucket | The Git solution for professional teams
明日は… [twitter:@inoshiro] かな?
#kabepy Advent Calendar 三日目: 上達のコツとか
昨日は Python Advent Calendar でしたが、今日は #kabepy Advent Calendar の三日目です。
しょしんしゃなのでてかげんしてください。
昨日に引き続き Sphinx で書いていたのでとりあえず同じように上げました。
(conf.py を書き換えないと若干残念)
Bitbucket | The Git solution for professional teams
はてダの存在意義とは…。
2012 Python アドベントカレンダー (Web フレームワーク ) 二日目 WSGI でなんか作ってみる #python_adv
Python アドベントカレンダー 二日目です。
Web アプリケーションフレームワークの Advent Calendar なのにフレームワーク使いません。WSGI だけでなんか作ってみるぜな内容です。
しかも Sphinx で書き始めたら文量がすごいことになったのでブログに書くのがためらわれました。
なので Bitbucket Pages を使ってみました。
Bitbucket | The Git solution for professional teams
ちなみにソースは github で管理してます。
明日
三日目は [twitter:@IanMLewis] さん担当です。
よろしくおねがいします。
Expert Python 読書会 第二期 10 #expertpython
えきぱい読書会 第二期 10回目はバージョン管理とCIでした。
kashew_nuts-tech: エキスパートPythonプログラミング読書会 第二期 10に参加しました。 #expertpython ここらへんを見ていて、当日絶妙な口下手さを発揮して一箇所説明がひどいことになった部分があったので言い訳させてください。
Mercurial ではなく Git を使っている理由です。
前職ですが、中央に Subversion がいる環境でした。
Subversion を直接触るのは嫌だったので hgsubversion を使って mercurial 経由でいじっていました。
その時 mercurial を選んだ理由は「Python で作られているから」というありがちなものでした。前職は Python が主だったので。
しかしあるとき mercurial と subversion の同期がとれなくなる(git svn dcommit できないような状態)という事態に遭遇し、不安定なら使うのをやめようという事になりました。
その際に代替として上がったのが git と git-svn で、これがなかなかいい感じだったので使い続けて今に至ります。
今の職場でも Subversion が真ん中にいるので git-svn で引っ張ってきて開発しています。
というのが当日言いたかったことでした。大変説明不足な感じで話してしまって申し訳ないです。
あと、今の hgsubversion がどうなっているかはわからないのであまり参考になりそうにありません。
という言い訳でした。