続き.actionpack/lib/action_controller/dispatcher.rb を見ると
5 | @@guard = Mutex.new
104 | def dispatch_unlocked
105 | begin
106 | run_callbacks :before_dispatch
107 | handle_request
108 | rescue Exception => exception
109 | failsafe_rescue exception
110 | ensure
111 | run_callbacks :after_dispatch, :enumerator => :reverse_each
112 | end
113 | end
114 |
115 | def dispatch
116 | if ActionController::Base.allow_concurrency
117 | dispatch_unlocked
118 | else
119 | @@guard.synchronize do
120 | dispatch_unlocked
121 | end
122 | end
123 | end
と言うことなので,いままでは Mutex で共有ロックかけてるのがわかる.んで,dispatch_unlocked が呼び出されて,例えば development 環境であれば run_callbacks :before_dispatch から reload_application が実行されたりする.
dispatch_unlocked の実体は handle_request なので
177 | protected
178 | def handle_request
179 | @controller = Routing::Routes.recognize(@request)
180 | @controller.process(@request, @response).out(@output)
181 | end
config/routes.rb から呼び出されるべき Controller を判定して,実行,出力すると言う感じ.
ここまで見てきて,Mutex を使わないこと以外 は ActionController 側では特に何もやってない感じがします.
次は ActiveRecord まわりを.
comments powered by Disqus