第7回 config/initializers ディレクトリ
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
(2008/02/27)
記事に関するご質問は、 hermes@oiax.jp までメールでお送りください。
ウェブサイト構築の発注先を検討されているお客様は、ご相談フォームをご利用ください。
- はじめに
- 第1回 インストール (2007/12/15)
- 第2回 新規アプリケーションの作成 (2007/12/16)
- 第3回 SQLite3 (2007/12/21)
- 第4回 テンプレートファイルの拡張子 (2007/12/22)
- 第5回 機能テスト (2008/01/19)
- 第6回 redirect_to と url_for (2008/02/24)
- 第7回 config/initializers ディレクトリ (2008/02/27)
- 第8回 Rails 1.2 の API ドキュメントを作る (2008/03/04)
- 第9回 helper :all (2008/05/05)

