まず Rails 2.3.0 RC1 は Rack 対応なおかげで,
% rake middleware
use Rack::Lock
use ActionController::Failsafe
use ActiveRecord::SessionStore, {:session_key=>"_session_id", :cookie_only=>false}
use ActionController::RewindableInput
use ActionController::ParamsParser
use Rack::MethodOverride
use Rack::Head
use ActiveRecord::QueryCache
run ActionController::Dispatcher.new
と言う感じで Rack 対応モジュールが順次実行されています.このどこかにオレオレモジュール
class DummyRack
def initialize(app)
@app = app
end
def call(env)
@app.call(env)
end
end
を積むには config/environment.rb に下記を追記
ActionController::Dispatcher.middleware.use DummyRack
すれば,
% rake middleware
use Rack::Lock
use ActionController::Failsafe
use ActiveRecord::SessionStore, {:cookie_only=>false, :session_key=>"_session_id"}
use ActionController::RewindableInput
use ActionController::ParamsParser
use Rack::MethodOverride
use Rack::Head
use ActiveRecord::QueryCache
use DummyRack
run ActionController::Dispatcher.new
と言う具合に「最後」に追加される.
- 実装的には,ActionController::MiddlewareStack という Array を継承したクラスがあり,そこに実行すべき Rack モジュールが入っていて,この配列に
- :use Module:最後に追加 :insert(index, Module): index 番目として挿入 :insert_after(index, Module): index 番目の次に挿入(index + 1 番目) :swap(index, Module): index 番目のモジュールと交換する
な感じです.
comments powered by Disqus