Hatena::ブログ(Diary)

なんとなく日記 このページをアンテナに追加 RSSフィード

2009-02-24

[][]Rails 2.3.0で MiddlewareStack に積む方法

まず 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 番目のモジュールと交換する

な感じです.

スパム対策のためのダミーです。もし見えても何も入力しないでください
ゲスト


画像認証

トラックバック - http://d.hatena.ne.jp/conceal-rs/20090224/1235466096