buildout と PasteDeploy を使って mod_wsgi で動かすための wsgi ファイルを作る

というわけでメモ。
今回ははてダ使ったよ。

こんなもの を作っていて、タイトル通りのことをやりたかったので、試行錯誤したメモ。

  • buildout で環境構築している
  • WSGI なアプリケーションを作っている
  • buildout で作った環境で mod_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")

あとはこいつを Apache の設定に書いてあげれば WSGI で動かせる。
いやー素晴らしいですね。

#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

はてダの存在意義とは…。

明日

明日は誰にしようかなーという感じだけど [twitter:@takabow] に投げます。
後は任せた!

と思ったら 調整シート によると [twitter:@hirokiky] だそうなので振り直さなければ。

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 が主だったので。

しかしあるとき mercurialsubversion の同期がとれなくなる(git svn dcommit できないような状態)という事態に遭遇し、不安定なら使うのをやめようという事になりました。
その際に代替として上がったのが git と git-svn で、これがなかなかいい感じだったので使い続けて今に至ります。
今の職場でも Subversion が真ん中にいるので git-svn で引っ張ってきて開発しています。

というのが当日言いたかったことでした。大変説明不足な感じで話してしまって申し訳ないです。
あと、今の hgsubversion がどうなっているかはわからないのであまり参考になりそうにありません。

という言い訳でした。