Padrino アプリケーションに積まれた Rack Middleware を確認する

  • 9
    いいね
  • 0
    コメント
この記事は最終更新日から1年以上が経過しています。
$ padrino -v
Padrino v. 0.11.1
$ padrino g project my_project

明示的に use で積んだミドルウェアはMyProject::App.middleware
で確認できますが、デフォルトで積まれるミドルウェアはそこには表示されません。

そこで、確認用のRakeタスクを作成してみました。

stacked_middlewares.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 は以下の順番で使われる様です。

  1. Padrino.use
  2. default middlewares
  3. Padrino::Application.use
  4. MyProject::App.use

例外が発生した場合はこの逆順で伝搬されるので、例外をキャッチするようなミドルウェアを書いた場合には、どのレシーバを使って積むのが良いかを気にする必要がありそうですね。