Railsでautoloadパスを追加
appの下にserviceクラスを作った時など、application.rb
にconfig/application.rb
を追加した。
config/application.rb
config.autoload_paths += %W(
#{config.root}/lib/
#{config.root}/app/services/
)
ただし、実際これでちゃんと読み込めているのか不安になる。
今まではわざわざconsoleでlib
の下などの関数が動くか試していた。
ActiveSupport::Dependenciesを呼び出す
gem active_support
の中のmodlue ActiveSupport::Dependencies
のコードを見てみると、
mattr_accessor :autoload_paths, default: []
とあり、外部からautoload_paths
にアクセスできる。これをconsoleで呼び出せば、autoload_pathの中身が見れるようだ。
[1] pry(main)> ActiveSupport::Dependencies.autoload_paths
=> ["/var/www/{service_name}/lib/",
"/var/www/{service_name}/app/services/",
"/var/www/{service_name}/app/assets",
"/var/www/{service_name}/app/controllers",
"/var/www/{service_name}/app/controllers/concerns",
"/var/www/{service_name}/app/helpers",
"/var/www/{service_name}/app/jobs",
"/var/www/{service_name}/app/models",
"/var/www/{service_name}/app/models/concerns",
"/bundle/gems/devise-4.6.2/app/controllers",
"/bundle/gems/devise-4.6.2/app/helpers",
"/bundle/gems/devise-4.6.2/app/mailers",
"/bundle/gems/activestorage-5.2.3/app/assets",
...
これで毎回関数を呼ばずにちゃんと読み込まれていることがわかる。安心安心。
備考
configの設定を変えた後は、consoleでreload!
をしても反映されない。
application.rb
を変更した後は再度rails c
する必要がある。