Rackのミドルウェアをconfig.ruやapplication.rbじゃないところでuseする

RackのMiddlewareを書いたらどこかでuseしなくちゃいけないんだけど、どこでuseするのかという話になる。
Rails3だと、

  • config.ru
  • config/application.rb
  • その他(ただし Application.initialize! より前)

っていうパターンがある。
config.ruとかapplication.rbで書いておくのがいいんだと思うけど、config/initializers/ 以下に置いた初期化スクリプトの中でuseしちゃいたい、そんな日もある。

こう書く。

# config/initializers/my_awesome_rack_middleware.rb

::Rails.application.config.middleware.use MyAwesomeRackMiddleware

こんなところでuseする利点としては、

  • application.rbで指定したconfig.autoload_pathsが反映されてるので、middlewareのrequireを書かなくても済む
    • autoload_pathsにlibディレクトリがあるなら、lib/my_awesome_rack_middleware.rb が勝手にロードされる
  • 初期化スクリプトを置くだけでMiddlewareが有効になるので、application.rbが必要以上に汚れなくて済む

とはいえuse文があちこちに散らばって書かれる状況が微妙ってこともあるので、ケースバイケースっすな。