会社の昼休みを使ってコードリーディング。

check_ruby_versionを見ていきます。 メソッド名を見るだけで、何をするメソッドか一目瞭然。

def check_ruby_version
  require 'ruby_version_check'
end

Read More…

Posted in code reading, ruby, ruby on rails at 2月 27th, 2008. No Comments.

久々に読んでます。

なんか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の中で

Rails::Initializer.run(:set_load_path)

が実行され、ロードパスが定義された後

もう一度

Rails::Initializer.run do |config|
end

今度は引数無しのブロッグ付きで呼び出される。 ブロック付きで渡されると

def self.run(command = :process, configuration = Configuration.new)
  yield configuration if block_given?
  initializer = new configuration
  initializer.send(command)
  initializer
end

Configurationのインスタンスに対して、カスタムされた設定が上書きされた上で processメソッドが走る。

うーん、深いな・・・。

Railsを実行する環境によって(テスト、開発、本番など)設定をうまく切り替えられる目的なわけですが、 結構複雑だなぁ。しかしよくできている。

次回は2回目のrun時に呼ばれるprocessメソッド内を見て行く。 ここは粛々と内部の初期化メソッドが呼ばれているだけみたいだから、時間をかければ読み切れると思う。

最近はてなダイアリーに引っ越そうかななんて思ってます。 はてな記法が便利だし、ソースを貼付けやすいから。

Posted in code reading, ruby, ruby on rails at 2月 22nd, 2008. No Comments.