mod_pythonでPasteベースなwsgiアプリケーションをvirtualenv内で動かすための8ステップ
1.setuptoolsをインストールする
http://peak.telecommunity.com/dist/ez_setup.py をダウンロード$ sudo python ez_setup.py
2.virtualenvをインストールしてバーチャル環境を作る
$ sudo easy_install virtualenv
$ mkdir ~/ENV
$ cd ~/ENV
$ virtualenv mysite
$ . mysite/bin/activate
3.バーチャル環境にPasteなどをインストール
(mysite)$ easy_install Paste PasteDeploy PasteScript
4.サンプルアプリケーションを作成
(mysite)$ mkdir ~/webapps
(mysite)$ cd ~/webapps
(mysite)$ paste create -t paste_deploy mysite
5.WSGIアプリケーションローダー
mod_pythonで動かすには、PasteDeployを使ってWSGIアプリケーションをロードする。~/webapps/mysite/wsgiloader.py
import os
from paste.deploy.loadwsgi import loadapp
uri = "config:%s" % os.path.join(os.path.dirname(__file__), 'devel_config.ini')
application = loadapp(uri)
6.wsgi_handler
mod_pythonからwsgiアプリを動かすためのスクリプトhttp://trac.gerf.org/pse/wiki/WSGIHandler
~/webapps/mysite/wsgi_handler.py に保存
PATH_INFOの処理がおかしいので修正
--- wsgi_handler.py.orig 2008-08-30 02:23:11.000000000 +0900
+++ wsgi_handler.py 2008-08-30 03:29:38.000000000 +0900
@@ -130,7 +130,7 @@
# required for WSGI to work properly
environ['PATH_TRANSLATED'] = self.req.filename
# this should be right...
- environ['PATH_INFO'] = environ['SCRIPT_NAME']
+ environ['PATH_INFO'] = environ['REQUEST_URI'][len(environ['SCRIPT_NAME']):]
environ['wsgi.input'] = WSGIInput(self.req)
environ['wsgi.errors'] = WSGIError(self.req)
7.virtualenv のためのhandler
バーチャル環境のライブラリをロードするためのスクリプト~/webapps/mysite/virtualhandler.py
import os
import site
site.addsitedir('/home/*****/ENV/mysite/lib/python2.4/site-packages/')
from wsgi_handler import handler
8.Apacheディレクティブを設定
PythonDebugやPythonAutoReloadはお好きなように。
<Location /mysite/>
PythonPath "['/home/*****/ENV/mysite/bin'] + sys.path"
SetHandler python-program
PythonHandler virtualhandler
PythonOption WSGI.Application wsgiloader::application
PythonDebug On
PythonAutoReload On
</Location>
|