2 flat logo on transparent 256
2018-11-24

Rails5でlib配下のクラス読み込みがNameErrorになる

Libs20181124

Ruby On Rails4から5にアップデートしたところ、lib配下に作成した独自クラスが読み込まれずエラーとなりました。

具体的にはこのRuby On Railsで外部APIを利用して、簡単なアプリケーションを作成するで紹介した APIを呼び出すライブラリがRuby On Rails5で動作しませんでした。

しかし、ローカル環境では動作しProduction環境では動作せず ずっとエラーになりましたが今回解決したので、紹介します。

Rails5でlib配下のクラス読み込みがNameErrorなる原因

Ruby On Rails4ではlibを読み込む際は以下のようにapplication.rbへautoload_pathsを追加しlibを読み込むように設定しました。

#config/application.rb

config.autoload_paths += %W(#{config.root}/lib)

ただ、Ruby On Rails5では Production環境ではアプリケーション起動後は自動読み込みが無効になりました(Autoloadの無効化)

Rails アップグレードガイドproduction 環境での起動後は自動読み込みが無効になる

その為Libなどの独自クラスへAutoloadしていても、無効になるためLib配下のファイルが読み込まれずNameErrorなどのエラーになります。

ただ、ローカル環境ではAutoloadされる為ローカル環境では正常に動作します。

解決方法

以下に変更すると解決しました。

#config/application.rb

config.paths.add 'lib', eager_load: true

参考サイト

Rails5のproduction環境でlib/配下のクラス読込みがNameErrorになるのはautoloadが無効化されたからだった

関連記事

ArgumentError in Controller index key must be 32 byteエラーについて

Ruby On Railsのin? メソッドで任意のオブジェクトに配列が含まれているか判別する

Ruby On RailsでConcernsを利用してControllerの処理を共通化する

Ruby On Railsのデバッグツール byebugの紹介

前の記事
次の記事