$ padrino -v
Padrino v. 0.11.1
$ padrino g project my_project
明示的に use で積んだミドルウェアはMyProject::App.middleware
で確認できますが、デフォルトで積まれるミドルウェアはそこには表示されません。
そこで、確認用のRakeタスクを作成してみました。
Usage:
$ pwd
/my_project
$ mkdir tasks
$ wget https://gist.github.com/tyabe/5518782/raw/9e2751b072b044e4b8ae6fa3acedf46f7c3d2221/stacked_middlewares.rake -P tasks/
$ rake middleware
Application: MyProject::App
Rack::Session::Cookie
Padrino::ShowExceptions
Padrino::Logger::Rack
Padrino::Reloader::Rack
Rack::MethodOverride
Rack::Head
Rack::Protection::FrameOptions
Rack::Protection::AuthenticityToken
なお、実際にどのような順番で call されていくかは、@udzura さんの書かれた[Rack Middleware たちがどのように呼ばれるかを見てみよう(e.g. Sinatra)]が参考になります。
これらを使って確認してみたところ、Padrino内でレシーバの異なる use は以下の順番で使われる様です。
- Padrino.use
- default middlewares
- Padrino::Application.use
- MyProject::App.use
例外が発生した場合はこの逆順で伝搬されるので、例外をキャッチするようなミドルウェアを書いた場合には、どのレシーバを使って積むのが良いかを気にする必要がありそうですね。