eager_load! を使ってみる (Rails)
Ruby Ruby on Rails
Published: 2020-10-25

やったこと

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