web.pyでWSGI

web.pyを使ってやっとメインのロジック部分が完成、いままでweb.pyをスタンドアローンで実行させ作っていたのでApacheと連携しさせてみることに。
既にCGIとしてPythonは動くのでアクセスしてみると・・・web.pyを使ったアプリは動かない。

うーん

なのでWSGIで動かしてみることを試してみる、とりあえずmod_wsgiのモジュールをGoogle Code Archive - Long-term storage for Google Code Project Hosting.で探してみるとない・・・。
動かす環境はWindowsXP+Apache2.0.63+Python2.5、各バージョンに合ったバイナリモジュールがない・・・

仕方なく他のサイトを検索してみたところ何とか発見!!http://adal.chiriliuc.com/mod_wsgi/

httpd.confに以下を記述

LoadModule wsgi_module modules/mod_wsgi.so
WSGIScriptAlias /wsgi "D:/Apache2/htdocs/hogehoge/hogehoge.py/"

動かない

Premature end of script headers: hogehoge.py

flupも必要みたいなのでhttp://trac.saddi.com/flupから入手してインストール
flup-1.0.2.tar.gz解凍して

python setup.py install

まだ動かないのでとりあえずhttp://webpy.org/install/ja通りにサンプルプログラムとhttpd.confを設定してみたところ無事成功

違いはhttpd.confに以下を追加したから?まあ後で調べよう


    SetHandler wsgi-script
    Options ExecCGI FollowSymLinks

で実際に自分のプログラムを動かすと・・・

mod_wsgi (pid=656):Target WSGI script 'D:/Apache2/htdocs/hogehoge/hogehoge.py' does not contain WSGI application 'application'.

よく調べてみると

スタンドアローンの時は任意だったみたいだけどwsgi経由にするときはオブジェクト名は"application"にするのか〜

(修正前)

app = web.wsgifunc(web.webpyfunc(urls, globals()))

(修正後)

application = web.wsgifunc(web.webpyfunc(urls, globals()))

やっと動いた〜!!

さらにスタンドアローンの時はクライアントから接続しているとき不安定な時があったけど安定している、実はクライアントはVBAXmlHttpRequestを使ったアプリだったのでこの不安定さはてっきりMS仕様かと思っていた。

とりあえず一段落