config.eager_load
config.eager_loadをtrueにすると、config.eager_load_namespacesに登録された事前一括読み込み(eager loading)用の名前空間をすべて読み込みます。ここにはアプリケーション、エンジン、Railsフレームワークを含むあらゆる登録済み名前空間が含まれます。
Rails.application.eager_load!
config.eager_load
の値にによらず、クラスの存在確認をできるようにしたい場合に使用する。
config.eager_load = true
と同じロード処理をその場で実行する。
使用状況:gem側で強制的にクラス存在確認を有効にしたい時
参考
Railsの config.eager_load はModelやControllerを読み込むタイミングを制御できる
const_defined? メソッド
クラスやモジュールの中に定数があるかどうかを調べる
Ruby on Railsのeager_load_pathsの仕組みを紐解く。
5 autoload_pathsとeager_load_paths
Railsにはファイルを探索する$LOAD_PATHに似た、ディレクトリのコレクションがあります。このコレクションはautoload_pathsと呼ばれており、デフォルトで以下が含まれます。
- 起動時にアプリケーションやエンジンのappディレクトリ以下に存在するすべてのサブディレクトリ(app/controllersなど)。app以下に置かれるapp/workersなどのカスタムディレクトリは、すべてautoload_pathsに自動的に属するので、デフォルトのディレクトリである必要はない。
- アプリケーションやエンジンのすべてのapp/*/concerns第2サブディレクトリ。
- test/mailers/previewsディレクトリ。
eager_load_pathsは、初期段階では上のappパスになります。
通常、ファイルがeager_load設定やcache_classes設定に応じて自動読み込みされる方法は、developmentモード/productionモード/testモードでそれぞれ変わります。
autoload_pathsは初期化中に算出され、キャッシュされます。ディレクトリ構造が変更された場合、変更を反映するにはアプリケーションを再起動する必要があります。