Paste:URLMap で VirtualHost

Paste の URLMap を利用すると VirtualHost と同じようなことができる。

[DEFAULT]
debug = false
email_to = foo@example.com
smtp_server = localhost
error_email_from = foo@example.com

[server:main]
use = egg:Paste#http
host = 0.0.0.0
port = 5000

[composite:main]
use = egg:Paste#urlmap

domain 127.0.0.1 port 5000 = main-app
domain main.example.com port 5000 = main-app
domain dev.example.com port 5000 = debug-app
domain pony.example.com port 5000 = debug-app

[composite:main-app]
use = egg:Paste#urlmap

/ = myapp
/blog = blogapp

[app:myapp]
use = egg:MyApp#main
...

[app:blogapp]
use = egg:BlogApp#blog
...

[app:dev-app]
use = main-app
debug = true

[app:pony]
use = main-app
filter-with = egg:Paste#pony

Paste Deploy のマニュアル に載っていなかったので、これまで domain や port オプションが使えることに気付かなかった。

余談

全く同じ Pylons アプリケーションを、DB 設定や data ディレクトリ設定のみ変えて、複数動かしたい。ハードウェア資源をできる限り有効活用したいのだけれども、上記構成だとたいしてメモリの節約にはならない。かと言って、 pylons.config オブジェクトはアプリケーションの初期化時に一度だけ作られるので、安易には書き換えられない(特に SQLAlchemy 周りで注意が必要)。1つの Pylons アプリで複数サイトを動かすには、 Dynamic に DB 設定や data ディレクトリ設定を変える仕組みをもう少し掘り下げて考える必要がありそうだ。

Posted by id:junya_hayashi