Djangoをmod_pythonで運用してるのだけど、mod_python終了のお知らせを耳にしたので、mod_wsgiを使ってみた。
環境
- Fedora12
- Python2.6.2
mod_pythonの設定
まずは、mod_pythonの現状設定。
/etc/httpd/conf.d/mod_python.conf(yumでmod_pythonを導入したら、このファイルになってた。)
LoadModule python_module modules/mod_python.so
<Directory "/var/www/manual/mod/mod_python">
<Files *.html>
SetHandler default-handler
</Files>
</Directory>
<Location /mysite/>
SetHandler python-program
PythonPath "sys.path + ['/var/www/django','/usr/lib/python2.6/site-packages/django',]"
PythonHandler django.core.handlers.modpython
SetEnv PYTHON_EGG_CACHE /var/www/django/mysite/.python-eggs
SetEnv DJANGO_SETTINGS_MODULE mysite.settings
PythonOption django.root /mysite
PythonDebug On
</Location>
mod_wsgiの設定
mod_wsgiのインストール
apacheの開発ツールapxs、Pythonのパスは適宜置換えを。
apxsがない場合は、事前にyumでインストール。
yum install httpd-devel
wget http://modwsgi.googlecode.com/files/mod_wsgi-3.2.tar.gz tar zxvf mod_wsgi-3.2.tar.gz cd mod_wsgi-3.2 ./configure --with-apxs=/usr/sbin/apxs --with-python=/usr/bin/python2.6 make make install
/etc/httpd/conf.d/mod_wsgi.confに下記を追加。
LoadModule wsgi_module modules/mod_wsgi.so
次にDjangoプロジェクトにdjango.wsgiを追加。ファイル名やパスは特に何でも良さそう。
/var/www/django
`-- mysite Djanoのプロジェクト
`-- apache/
|-- __init__py(お忘れなく!)
`-- django.wsgi
import os, sys apache_configuration = os.path.dirname(__file__) project = os.path.dirname(apache_configuration) workspace = os.path.dirname(project) sys.path.append(workspace) os.environ['PYTHON_EGG_CACHE'] = os.path.join(workspace, '.python-eggs') os.environ['DJANGO_SETTINGS_MODULE'] = 'mysite.settings' import django.core.handlers.wsgi application = django.core.handlers.wsgi.WSGIHandler()
Apacheのconfファイルに設定。
WSGIScriptAliasMatch /mysite /var/www/django/mysite/apache/django.wsgi
<DirectoryMatch ^/var/www/django/mysite/apache>
Order deny,allow
Allow from all
</DirectoryMatch>
# 複数のDjangoプロジェクトに対応する例
#WSGIScriptAliasMatch ^/([^/]+) /var/www/django/$1/apache/django.wsgi
#<DirectoryMatch ^/var/www/django/([^/]+)/mysite/apache>
# Order deny,allow
# Allow from all
#</DirectoryMatch>これで現状動いてる。後日検証してみる。