

rails5 の production環境で uninitialized constant errorが発生します。  
development環境では、エラーは発生しておらず、原因をお伺いいたしたく、投稿致します。

◆ コマンド

[code]

    # rails restart
    # bundle exec rails runner [クラス名].[メソッド名] -e production
    uninitialized constant Rails::Command::RunnerCommand::[クラス名]
    
[/code]

※ 「-e production」を抜いて同コマンドを実行した際は正常終了します。  
※ [クラス名]は、lib配下に配置しています。

◆ application.rb設定

[code]

    config.load_defaults 5.1
    config.i18n.default_locale = :ja
    config.autoload_paths += Dir["#{config.root}/lib/**/"]
    config.eager_load_paths += Dir["#{config.root}/lib/**/"]
    config.paths.add 'lib', eager_load: true
    
[/code]

また、解析に必要なパラメータが他にあれば、教えてください。


CC BY-SA 3.0
2018-02-17T19:47:49.510
41818
2018-10-01T19:00:53.137
2018-02-17T19:53:03.620
25428
25428
question
ruby-on-rails
rails5 の production環境で uninitialized constant error が発生


おそらく自己解決したので、備忘を兼ねて回答を記載します。

◆ application.rb(修正前)

[code]

    config.load_defaults 5.1
    config.i18n.default_locale = :ja
    config.autoload_paths += Dir["#{config.root}/lib/**/"]
    config.eager_load_paths += Dir["#{config.root}/lib/**/"]
    config.paths.add 'lib', eager_load: true
    
[/code]

◆ application.rb(修正後)

[code]

    config.load_defaults 5.1
    config.i18n.default_locale = :ja
    #config.autoload_paths += Dir["#{config.root}/lib/**/"]
    config.eager_load_paths += Dir["#{config.root}/lib/"]
    config.paths.add 'lib', eager_load: true
    
[/code]

実施したのは、以下3点です。  
※ autoload_pathsをコメントアウト(Rails5では廃止されているため)  
<https://qiita.com/joooee0000/items/3ab0f3d791e0d0beb639>  
※ eager_load_pathsの「~lib/**/」を「~lib/」に修正  
※ 本番環境再起動

なぜ、これがうまくいったかについては現時点で不明です。  
お分かりになる方がいれば記載いただければ幸いです。


CC BY-SA 3.0
2018-02-17T23:17:38.697
41819
2018-02-17T23:17:38.697
25428
41818
answer


<https://github.com/rails/rails/blob/bd5eba1adff8fa72429f5889ae26097e9756ceb0/railties/lib/rails/engine/configuration.rb#L75>

などを見ていると、 rails 5+ では、 eager_load_paths や auto_load_paths は、 config.paths
から勝手に生成される前提の様子です。

ですので、 `config.paths.add 'lib', eager_load: true` だけがあればよく、この形式のみの paths
の設定を行うのが良いと思います。


CC BY-SA 4.0
2018-07-14T05:49:29.643
45607
2018-07-14T05:49:29.643
754
41818
answer