Rails2.0を読んでみる-初期化編

吉見和也(Kazuya Yoshimi) 2007-12-13 12:42:41

Rails2.0も出たわけですし、早速ソース読みです。ちなみに2.0が出る前は全く追ってなかったので、どんな機能が追加されてるかまったく知りません。やっぱり目につくのはActiveModelなんですが、最初に見たいのはRails::Initializer。railsの起動時にconfigの下のenvironment.rbの中で、Rails::Initializer.runが実行されて、アプリケーションを初期化します。どう初期化されてるのかを知れば、環境のカスタマイズも自由自在。自分に適した環境に書き換えて、より快適なrailsライフを送れます。

Rails Trac - initializer.rb

まずはenvironment.rbの中で実行されるrun


46 def self.run(command = :process, configuration = Configuration.new)

47   yield configuration if block_given?

48   initializer = new configuration

49   initializer.send(command)

50   initializer

51 end

47行目では、与えられたconfigrationを与えられたブロックで処理。

48行目のnewは勘違いしやすいけど、Rails::Initializer.newと同じ意味で、configrationはただの引数。Rails::Initializer.new(configration)ってことです。

49行目では48行目で作ったインスタンスに、commandで与えられた名前のメソッドを実行するよう言ってる。

で、デフォルトで実行されるのがprocessメソッド。中では順に初期化用のメソッドを呼んでるだけですね。


84  def process

85    check_ruby_version

86    set_load_path

87  

88    require_frameworks

89    set_autoload_paths

90    add_plugin_load_paths

91    load_environment

92 

93    initialize_encoding

94    initialize_database

95    initialize_logger

96    initialize_framework_logging

97    initialize_framework_views

98    initialize_dependency_mechanism

99    initialize_whiny_nils

100   initialize_temporary_directories

101   initialize_framework_settings

102

103   add_support_load_paths

104

105   load_plugins

106

107   # Observers are loaded after plugins in...略

108   load_observers

109

110   # Routing must be initialized after pl...略

111   initialize_routing

112

113   # the framework is now fully initialized

114   after_initialize

115

116   load_application_initializers

117 end

それぞれのメソッドは読めばわかると思うので説明は省きますが、だいたい中ではconfigrationのプロパティを元に、設定をアプリケーションに反映させています。つまり、46行目で引数のデフォルトになっているConfigrationクラスのインスタンスに、自分に適した設定をしてあげれば良いってことですね。

そしてそれをやってくれているのが47行目。でもってその実装はenvironment.rbからブロックで渡されてくる、と。

ここらへんは2.0で特に大きな変化はないっぽい?読み込むframeworkがちょっと違うくらい?早く劇的びふぉーあふたーなところが見たいです

押忍

※このエントリはZDNetブロガーにより投稿されたものです。朝日インタラクティブ および ZDNet編集部の見解・意向を示すものではありません。

SpecialPR