ページ

2011年5月27日

mod_wsgiをセットアップしたときのメモ

最近はgeventを使ってコードを書いています。当然Webサーバもgeventをそのまま使っていました。今回もそれでもよかったのですが、久しぶりにフロントエンドにApacheをつかって、mod_wsgiを使ってPythonのアプリを動かしました。まあ、規模は極めて小さいですが・・・。ちなみに、今回って言うのは、この廃人養成サービス「Twwweet」のことです。で、mod_wsgiをセットアップしたときのメモです。サーバはubuntuのサポートが長いやつの最新です。

まずは、何はともあれmod_wsgiをインストールせねばなりません。いつもの「apt-get install libapache2-mod-wsgi」の召喚呪文を唱えます。召喚が完了すると、/var/www/の下にmyappっていうディレクトリをつくって、そこに自分のアプリを置きます。次に、/etc/apache2/mods-enabled/wsgi.confを開いて次の行を追加します。

WSGIPythonPath /var/www/myapps
WSGIRestrictStdout Off
WSGIDaemonProcess myapps threads=4
WSGIScriptAlias / /var/www/myapps/myapps.wsgi
<Directory /var/www/myapps>
    WSGIProcessGroup myapps
    WSGIApplicationGroup %{GLOBAL}
    Order deny,allow
    Allow from all
</Directory>

なんだか、僕が昔使っていたときとかなり違っているような気がします。WSGIPythonPathで自分の作ったモノへPythonPathが通るようにするはずだったんですが、うまく動かなかったので、あとで、wsgiのファイルで変更しています。WSGIRestrictStdoutは、僕のコードはログをloggingを通して標準エラーに出力しているんですが、これをやると例外が発生しちゃうので、標準エラーにはき出してもいいように設定してます。
WSGIDaemonProcessはスレッド数や実行するユーザやグループを制御できます。WSGIScriptAliasで実行するスクリプトを指定しています。

/var/www/myappにもどって、そこのディレクトリにmyapp.wsgiを作って次のようにかきます。

import sys
sys.path.insert(0, "/var/www/myapp")

from main import app as application

sys.pathに追加しているのはWSGIPythonPathが動かなかったせいです。appはwsgiアプリケーションですね。

でわでわ

0 件のコメント: