HerokuでRailsアプリのlibフォルダが読み込まれない時の対処法
に関するメモ。
背景
タイトル通りですが、Heroku上にデプロイしたRailsアプリにて、 libフォルダ以下に配置したファイルが読み込まれないという自体に遭遇しました。
いろいろと試した結果、とりあえず動くようになる方法を見つけたのでメモ。
解決方法
結論からいうと、いわゆるproduction環境では、
config/environments/production.rb
などのファイルに以下の記述を追加する必要があったようです。
config.eager_load_paths += %W( #{config.root}/lib )
※ eager_load
と呼ばれるものが何かは正直良く分かっていませんので、後日調べようかと思います。
ちなみに、eager_load_path
を入れず、lib以下の必要なファイルを都度require
しても問題はなかったりします。
やっていたこと
最初はconfig/application.rb
に以下のような記述をしていました。
config.autoload_paths += %W(#{config.root}/lib)
この状態でrails s
をしてサーバを立ち上げ、ローカル上でlib
以下のファイルが読み込まれるのを確認しました。
ローカルでの動作を確認したので、Heroku上にデプロイし、動作を確認しようとしたところ、
lib
以下に配置したファイルで定義されているクラスが使用できず、NameErrorになってしまいました。
rails c
でautoload_path
を確認すると/app/lib
というディレクトリが含まれてはいました。
しかし、どうもproduction環境ではこの設定がいまいちちゃんと効かないようで、 上記のような追記をしなければいけませんでした。
調べても全然解決策が出てこなかったのですが、皆さんあまり引っかからないのでしょうか…