TurboGearsアプリを Apache + mod_fastcgi で動かしたときのメモです。*1
環境
Python 2.5
TurboGears 1.0.3.4
CherryPy 2.3.0
flupインストール
TurboGearsアプリは基本的にWSGIアプリなので、WSGIサーバが必要なわけです。ここからインストール。
fcgiスクリプト作成*2 *3
start-myapp.py をコピーして、myapp.fcgiを作ります。で、以下のように修正。
#!/path/to/python import pkg_resources pkg_resources.require("TurboGears") from turbogears import config, update_config, start_server import cherrypy cherrypy.lowercase_api = True from os.path import * import sys # dev.cfgとか使わなくしちゃう # (いじらなくてもいいけど、一応) # if len(sys.argv) > 1: # update_config(configfile=sys.argv[1], # modulename="myapp.config") # elif exists(join(dirname(__file__), "setup.py")): # update_config(configfile="dev.cfg",modulename="myapp.config") # else: # update_config(configfile="prod.cfg",modulename="myapp.config") update_config(configfile="prod.cfg",modulename="myapp.config") config.update(dict(package="myapp")) from myapp.controllers import Root # ↓ここはコメントアウト # start_server(Root()) # 以下を追加 ========================== # CherryPyをセットアップして・・・ cherrypy.tree.mount(Root()) cherrypy.server.start(initOnly=True,serverClass=None) # flupのFastCGIサーバを使ってWSGIとして動かす from cherrypy._cpwsgi import wsgiApp from flup.server.fcgi import WSGIServer WSGIServer(wsgiApp).run()
prod.cfgの設定*4
FastCGIとは直接関係ないがハマったので。root以外に配備するとき(後述のScriptAlias参照)は、server.webpathを有効にする。
server.webpath = "/myapp"
httpd.confの設定
普通のFastCGIと変わらない設定でいいです。mod_fastcgiについて調べて、もっと適切な設定をするといいでしょう。
FastCgiServer /path/to/myapp.fcgi ScriptAlias /myapp /path/to/myapp.fcgi
これでとりあえず動きました。正しいかは微妙なので、突っ込み大歓迎です。
*2:参考文献: http://tools.cherrypy.org/wiki/FastCGIWSGI
*3:参考文献: http://nagosui.org/Nagosui/Misc/Turbogears/docs/1.0-b/LightTPD
*4:turbogears-jaで聞いた。Thanks to 清水川さん。