2007年5月22日
TurboGearsをmod_wsgiで使ってみる
最近は、PloneのみならずTurboGearsを使うこともある。
TurboGearsには、Zope/Ploneと同じように、CherryPyというWebサーバが内蔵されている。CherryPyは関数がそのままURLにマッピングされ、GET引数や「/」で区切った引数の処理が柔軟で非常に便利である。
TurboGearsの本番環境へのIntegrateは、CherryPyをそのまま使用する(フロントにApacheと置いて、Proxyにて行う方法がよく使われているようである。他には、mod_pythonを使った方法も使われている。
Pythonには、WSGI(Web Server Gateway Interface)という仕様がある。Pythonで書かれた、TwistedというサーバやDjangoなどがこのWSGIに対応している。CherryPyもWSGI対応となっている。
最近、mod_wsigというプロジェクトが本格的になってきたようである。Djangoをmod_wsgiで動かそうとしている人がいることを見つけ、TurboGeasでも使えるはずとおもい週末からテストを行ってみた。下記に悪戦苦闘の結果を記載しておく。
*2007年11月7日に、WSGIファイルを変更しました。
- OSは、CentOS4.4を使用(ほぼデフォルトインストール状態)
- Apacheにapxsが導入されていること。
- インストールされていなかったので、yumでインストール
-
yum install httpd-devel
- mod_wsgiのインストール
-
$ svn checkout http://modwsgi.googlecode.com/svn/trunk/ modwsgi
$ cd modwsgi
$ ./configure
$ make
# cp .libs/mod_wsgi.so /etc/httpd/modules/. - expatのバージョン確認
-
# ldd /usr/sbin/httpd | grep expat
libexpat.so.0 => /usr/lib/libexpat.so.0 (0x00152000)
# strings /usr/lib/libexpat.so.0 | grep expat_
expat_1.95.7 - pyexpatはPython2.4.4を使用すると、1.95.8となる。
- これでは、バージョン違いで、
child pid xxxxx exit signal Segmentation fault (11)
- となってしまい、動かない。そこで、expatをソースからインストールする。
- expatのソースインストール
- http://sourceforge.net/projects/expat/ から1.95.8をダウンロード
-
$ ./configure
$ make
# make instal
# vi /etc/ld.so.conf
'/usr/local/lib'を追記
# /sbin/ldconfig - wsgi設定ファイルの作成
- project.wsgiとした。
- 2007年11月7日変更(identity を使用しているとうまくいかない件の解消)
-
import os
os.environ['PYTHON_EGG_CACHE'] = '/home/USER/www/'
import sys
sys.path.append('/home/USER/www')
sys.stdout = sys.stderr
import atexit
import cherrypy
import cherrypy._cpwsgi
import pkg_resources
pkg_resources.require("TurboGears")
import turbogears
turbogears.update_config(configfile="prod..cfg", modulename="project.config")
turbogears.config.update({'global': {'server.environment': 'production'}})
turbogears.config.update({'global': {'autoreload.on': False}})
# +++++++
import project.controllers #修正部
cherrypy.root = project.controllers.Root() #修正部
# +++++++
if cherrypy.server.state == 0:
atexit.register(cherrypy.server.stop)
cherrypy.server.start(init_only=True, server_class=None)
# --------
#import project.controllers
#cherrypy.root = project.controllers.Root()
# --------
application = cherrypy._cpwsgi.wsgiApp -
- httpd.confへの追記
-
LoadModule wsgi_module /etc/httpd/modules/mod_wsgi.so
<VirtualHost *:80>
ServerName www.example.com
Alias /static /home/USER/www/project/project/static
WSGIScriptAlias / /home/USER/www/project/project.wsgi
</VirtualHost> - 参考サイト
- 固定リンク
- ¦
- コメント (0)
- ¦
- トラックバック (1)
- トラックバック用URL:
[python]TurboGearsアプリをFastCGIでデプロイする
投稿者
a geek
投稿日時:
1999年01月01日 06時45分
TurboGearsアプリを Apache + mod_fastcgi で動かしたときのメモです。*1 環境 Python 2.5 TurboGears 1.0.3.4 CherryPy 2.3.0 mod_fastcgiインストール 入ってるの前提なので省略。このエントリとかこのエントリとか。 flupインストール TurboGearsアプリは基本的にWSGIア