macportsでvirtualenvとapacheとmod_wsgi

virtualenvで仮想環境を作ることが出来たので、これをmod_wsgi経由でapacheから利用できるようにしたいと思います。


過去にmacportswsgi_modを入れていたのでこれを使おうと思ったのですが、
確認したところインストールされているのはmod_wsgi@3.3_0+python26となっていてpython2.6を使用する設定になっている模様。
仮想環境はpython2.5にしたので1度deactivateにして再度インストールすることに。

sudo port install mod_wsgi -python25

しかしpython2.5を指定しても結局インストールされるのはmod_wsgi@3.3_0+python26。
うーん、ヴァージョンを下げなければpython2.5では入らないんですかね・・・。
悩んだあげく、よくわからず仮想環境をpython2.6に変更しました。



さて気を取り直してmod_wsgiを有効にするためapachehttpd.confを書き換えます。
macportで入れたapache2ならopt/local/apache2/conf/の中にあります。
54行目あたりのLoadModuleが羅列してある最後に

LoadModule wsgi_module modules/mod_wsgi.so

があることを確認します。なければ追加します。


続いてWSGIPythonHomeを設定します。
virtualenvwrapperで作成した仮想環境のパスを指定すればいいようです。

WSGIPythonHome ~/Test/Test1/


仮想環境はヴァーチャルホストで運用するのがいいかと思います。
virtualhostを設定して、Directoryディレクティブに以下の設定を書けば動かせるはずです。

<Directory "~/Test/Test1">
Options Indexes FollowSymLinks ExecCGI
SetHandler wsgi-script
AddHandler wsgi-script .wsgi
AddHandler wsgi-script .py
</Directory>

これくらい書いとけば取りあえず動くと思います。





Djangoでテストしてみる

せっかくなのこの環境でDjangoを動かしてみたいと思います。
まずはworkon Test1としてpipでdjnagoをインストール。


設定については以下のドキュメントで詳しく説明してくれています。
Apache と mod_wsgi 環境で Django を使う方法


自分の仮想環境の設定では以下のような感じ。


httpd.conf

WSGIScriptAlias / ~/Test/Test1/django/django.wsgi

djnago.wsgi

sys.path.append('~/Test/Test1')