Rails4 と Rails5 とで eager_load_paths の内容に差異があることを知
りました。
Rails5 では app 以下の全ての concerns ディレクトリや channels ディ
レクトリが追加されています。
以下、Rails4 と Rails5 とで実装箇所を追ってみました。
Rails-4.2.10
eager_load_paths を返すメソッド
Rails::Engine::Configuration#eager_load_paths
↓
eager_load_paths の構築開始。Rails5 と違いあり
Rails::Engine::Configuration#paths
↓
Rails::Paths::Root#add
↓
Rails::Paths::Path#initialize
↓
Rails::Paths::Path#eager_load!
ここまでで eager_load_paths の構築完了
↓
Rails::Paths::Root#eager_load
結果を返す
Rails-5.2.0
eager_load_paths を返すメソッド
Rails::Engine::Configuration#eager_load_paths
↓
eager_load_paths の構築開始。Rails4 と違いあり
Rails::Engine::Configuration#paths
↓
Rails::Paths::Root#add
↓
Rails::Paths::Path#initialize
↓
Rails::Paths::Path#eager_load!
ここまでで eager_load_paths の構築完了
↓
Rails::Paths::Root#eager_load
結果を返す
まとめ
Rails の eager_load_paths を調べました。app 以下が再帰的に追加され
るだけかと思ってましたが、調べたら凝ったことをしていました。config
以下も追加されるのも、なるほど…といった感じでした。
なお、eager_load は本番環境では通常有効にしないので、以上は開発環
境の話です。
念のためですが、現在の Rails は autoload_paths は非奨励ですので、
ご注意を。
参考情報: