2 月 22 2008
Rails::Initializer.runは2回(以上)実行されている?
久々に読んでます。
なんかRailsの起動処理に誤解があったみたいです。 Rails::Initializer.runは1度しか実行されないと思ってたけど、そうじゃないみたい。
とりあえずRails::Initializer.runが2回実行される流れをまとめてみよう。
+environment.rbが読み込まれる ++boot.rbが読み込まれる +++Rails.boot!が実行される ++++Boot.runが実行される +++++Rails::Initializer.run(:set_load_path) ++Rails::Initializer.run do |config|; end
つまり一度boot.rbの中で
が実行され、ロードパスが定義された後
もう一度
end
今度は引数無しのブロッグ付きで呼び出される。 ブロック付きで渡されると
yield configuration if block_given?
initializer = new configuration
initializer.send(command)
initializer
end
Configurationのインスタンスに対して、カスタムされた設定が上書きされた上で processメソッドが走る。
うーん、深いな・・・。
Railsを実行する環境によって(テスト、開発、本番など)設定をうまく切り替えられる目的なわけですが、 結構複雑だなぁ。しかしよくできている。
次回は2回目のrun時に呼ばれるprocessメソッド内を見て行く。 ここは粛々と内部の初期化メソッドが呼ばれているだけみたいだから、時間をかければ読み切れると思う。
--
最近はてなダイアリーに引っ越そうかななんて思ってます。 はてな記法が便利だし、ソースを貼付けやすいから。