はのちゃ爆発

はのちゃが技術ネタとか日常のこととかを書いてます。

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 cautoload_pathを確認すると/app/libというディレクトリが含まれてはいました。

しかし、どうもproduction環境ではこの設定がいまいちちゃんと効かないようで、 上記のような追記をしなければいけませんでした。

調べても全然解決策が出てこなかったのですが、皆さんあまり引っかからないのでしょうか…

参考

blog.arkency.com

railsguides.jp

www.nyaahara.com