やったこと
eager_load! を使ってみます。
例えば設定で eager_load を使わない Rails.env の時、 ファイルを先にロードしておきたい時などに使います。
確認環境
$ ruby --version
ruby 2.6.3p62 (2019-04-16 revision 67580) [x86_64-darwin17]
$ rails --version
Rails 5.2.4.1
調査
app/models/book.rb
class Book < ApplicationRecord
belongs_to :auther, class_name: Author
end
Author クラスは存在していないクラスとします。
config/environments/development.rb
Rails.application.configure do
# 抜粋
# Do not eager load code on boot.
config.eager_load = false
end
出力結果
$ bundle exec rails c
Running via Spring preloader in process 5654
Loading development environment (Rails 5.2.4.1)
irb(main):001:0> Rails.application.eager_load!
Traceback (most recent call last):
3: from (irb):1
2: from app/models/book.rb:1:in `<main>'
1: from app/models/book.rb:3:in `<class:Book>'
NameError (uninitialized constant Book::Author)
eager_load! すると落ちることが確認できます。
こんな感じで、shell 上で rails のコマンドを実行して、 ロード失敗するクラスを検知することも出来るようになります。
$ bundle exec rails runner 'Rails.application.eager_load!'
Running via Spring preloader in process 7687
Please specify a valid ruby command or the path of a script to run.
Run 'bin/rails runner -h' for help.
uninitialized constant Book::Author