独立した複数の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