mod_pythonでApacheのVirtualHostを設定する

意外とハマりました。

<VirtualHost *:80>
    ServerName ホスト名
    DocumentRoot プロジェクトフォルダのパス
    SetHandler mod_python
    <Location />
        PythonPath “[‘プロジェクトフォルダのパスのひとつ上’] + sys.path”
        PythonHandler django.core.handlers.modpython
        SetEnv DJANGO_SETTINGS_MODULE プロジェクト名.settings
        PythonDebug On
    </Location>
</VirtualHost>

PythonPathがわかりにくいですよね。「hoge」というプロジェクトで「c:works」の下にあったとしたら、DocumentRootは「c:workshoge」で、PythonPathは「”[‘c:works’] + sys.path”」になります。SetEnv DJANGO_SETTINGS_MODULEは「hoge.settings」ですね。

PythonDebugは、本番環境ではもちろんOffにしてください。Apache起動時にアプリケーションをメモリ上にロードするため、PHPみたいにソース差し替えただけだと修正が反映されません。

/etc/rc.d/init.d/httpd restart

で、Apacheのリスタートが必要です。

「Apacheのリスタートなんてしたらセッション切れちゃうじゃないか」と思っていたのですが、セッションをファイルベースにしたら維持されてくれました。よかったよかった。

mod_python+Django、早いです。軽快です。mod_rails+RubyonRailsとはえらい違いです。mod_wsgiだともっと早いんだろうなぁ。。。