第7回 config/initializers ディレクトリ
2008/02/27
Rails 2.0 以前は config/environments.rb
にアプリケーション特有の初期化コードを書いたものですが、2.0 以後は config/initializers
ディレクトリに置いたファイルが自動的に読み込まれるようになりました。
この仕組みはどんな風に作られているのでしょうか。
rails-2.0.2
ディレクトリで、文字列 'initializers' を含むファイルを検索すると、該当するソースコードはすぐに見つかります。initializer.rb
です。Rails::Initializer#load_application_initializers
が、問題のメソッドです。
def load_application_initializers Dir["#{configuration.root_path}/config/initializers/**/*.rb"].sort.each do |initializer| load(initializer) end end
Dir[pattern]
は、pattern にマッチするパス名の配列を返します。それを sort
して each
で回しながら、一つずつ読み込んでいく、というわけです。ファイルの名前順に読み込まれることが分かります。
さて、このメソッドは Rails::Initializer#process
メソッドの中から呼ばれています。
def process check_ruby_version # (省略) load_application_initializers end
更に遡ると、クラスメソッド Rails::Initializer.run
の initializer.send(command)
というコードにたどり着きます。
def self.run(command = :process, configuration = Configuration.new) yield configuration if block_given? initializer = new configuration initializer.send(command) initializer end
変数 command
の中身は :process
というシンボルなので、initializer.process
を実行しているのと同じことです。
では、Rails::Initializer.run
はどこから呼ばれているのでしょうか。そう、それはあなたのアプリケーションの config/environment.rb
の中です。
Rails::Initializer.run do |config| # (省略) end