独立した複数のPylons Application を一度に動かす方法
いまだにPaste のことをちゃんと理解していなかった。
- paste.app_factory
- paste.composite_factory
- paste.filter_app_factory
このあたりは、ちゃんと押さえておかなくてはならない。
[filter:main] use = egg:Pyxis#pyxiscomposite /blog = blog /wiki = wiki [app:wiki] use = egg:PyxisExample#wiki [app:blog] use = egg:PyxisExample#blog is_blog = True [app:main] use = egg:PyxisExample#main
こんな感じで書けるようにすれば、複数のWSGIApplication を同時に動かしつつ、lib/middleware.py が複雑にならなくて済む。
1つのプロジェクトに対して、 make_app が複数定義できるのがポイント。上記に対応して、entry_points には複数のアプリの設定が必要。
[paste.app_factory] main = pyxisexample.config.middleware:make_app blog = pyxisexample.config.middleware:make_blog_app wiki = pyxisexample.config.middleware:make_wiki_app
posted by id:junya_hayashi
追記
上記の方法ですが、実際にやってみたらこんな感じになりました。
- development.ini
[composite:main] use = egg:Paste#cascade app1 = admin app2 = flatpage app3 = main_app [app:main_app] use = egg:PyxisExample#main full_stack = true prefix = [app:flatpage] use = egg:PyxisExample#flatpage full_stack = true prefix = [app:admin] use = egg:PyxisExample#admin full_stack = true prefix = /admin
- entry_ponints.txt
[paste.app_factory] main = pyxisexample.config.middleware.main:make_app admin = pyxisexample.config.middleware.admin:make_app flatpage = pyxisexample.config.middleware.flatpage:make_app
${project}/config/middleware/*.pyに複数のmake_appを定義して、development.iniでそれらを指定しています。上でも書かれていますが、ミドルウェアの設定がアプリケーション毎に分かれてとてもすっきりしました。
ただ、複数のアプリで共通する設定をdevelopment.iniの中で一ヶ所に書きたかったのですが、うまいやり方が思いつかずに今は[DEFAULT]セクションに書いています。何か良い方法はないでしょうか?
posted by id:knzm