web-dev-qa-db-ja.com

Rails本番環境のコンソール:NameError:初期化されていない定数

私はRailsアプリ(Rails 5)を持っています。開発中は、すべて使用できます。

Rails console

そして、例えばUser.all、動作しています。

本番環境では、私のアプリは問題なく動作し、エラーは発生しませんが、Rails console productionと入力します(例:User.allエラーが発生しました:

NameError: uninitialized constant User
    from (irb):2
    from /home/alexandre/.rbenv/versions/2.3.1/lib/Ruby/gems/2.3.0/gems/railties-5.0.0.1/lib/Rails/commands/console.rb:65:in `start'
    from /home/alexandre/.rbenv/versions/2.3.1/lib/Ruby/gems/2.3.0/gems/railties-5.0.0.1/lib/Rails/commands/console_helper.rb:9:in `start'
    from /home/alexandre/.rbenv/versions/2.3.1/lib/Ruby/gems/2.3.0/gems/railties-5.0.0.1/lib/Rails/commands/commands_tasks.rb:78:in `console'
    from /home/alexandre/.rbenv/versions/2.3.1/lib/Ruby/gems/2.3.0/gems/railties-5.0.0.1/lib/Rails/commands/commands_tasks.rb:49:in `run_command!'
    from /home/alexandre/.rbenv/versions/2.3.1/lib/Ruby/gems/2.3.0/gems/railties-5.0.0.1/lib/Rails/commands.rb:18:in `<top (required)>'
    from /home/alexandre/.rbenv/versions/2.3.1/lib/Ruby/gems/2.3.0/gems/activesupport-5.0.0.1/lib/active_support/dependencies.rb:293:in `require'
    from /home/alexandre/.rbenv/versions/2.3.1/lib/Ruby/gems/2.3.0/gems/activesupport-5.0.0.1/lib/active_support/dependencies.rb:293:in `block in require'
    from /home/alexandre/.rbenv/versions/2.3.1/lib/Ruby/gems/2.3.0/gems/activesupport-5.0.0.1/lib/active_support/dependencies.rb:259:in `load_dependency'
    from /home/alexandre/.rbenv/versions/2.3.1/lib/Ruby/gems/2.3.0/gems/activesupport-5.0.0.1/lib/active_support/dependencies.rb:293:in `require'
    from /home/alexandre/tcheen/bin/Rails:9:in `<top (required)>'
    from /home/alexandre/.rbenv/versions/2.3.1/lib/Ruby/gems/2.3.0/gems/spring-1.7.2/lib/spring/commands/Rails.rb:6:in `load'
    from /home/alexandre/.rbenv/versions/2.3.1/lib/Ruby/gems/2.3.0/gems/spring-1.7.2/lib/spring/commands/Rails.rb:6:in `call'
    from /home/alexandre/.rbenv/versions/2.3.1/lib/Ruby/gems/2.3.0/gems/spring-1.7.2/lib/spring/command_wrapper.rb:38:in `call'
    from /home/alexandre/.rbenv/versions/2.3.1/lib/Ruby/gems/2.3.0/gems/spring-1.7.2/lib/spring/application.rb:191:in `block in serve'
    from /home/alexandre/.rbenv/versions/2.3.1/lib/Ruby/gems/2.3.0/gems/spring-1.7.2/lib/spring/application.rb:161:in `fork'
    from /home/alexandre/.rbenv/versions/2.3.1/lib/Ruby/gems/2.3.0/gems/spring-1.7.2/lib/spring/application.rb:161:in `serve'
    from /home/alexandre/.rbenv/versions/2.3.1/lib/Ruby/gems/2.3.0/gems/spring-1.7.2/lib/spring/application.rb:131:in `block in run'
    from /home/alexandre/.rbenv/versions/2.3.1/lib/Ruby/gems/2.3.0/gems/spring-1.7.2/lib/spring/application.rb:125:in `loop'
    from /home/alexandre/.rbenv/versions/2.3.1/lib/Ruby/gems/2.3.0/gems/spring-1.7.2/lib/spring/application.rb:125:in `run'
    from /home/alexandre/.rbenv/versions/2.3.1/lib/Ruby/gems/2.3.0/gems/spring-1.7.2/lib/spring/application/boot.rb:19:in `<top (required)>'
    from /home/alexandre/.rbenv/versions/2.3.1/lib/Ruby/2.3.0/rubygems/core_ext/kernel_require.rb:55:in `require'
    from /home/alexandre/.rbenv/versions/2.3.1/lib/Ruby/2.3.0/rubygems/core_ext/kernel_require.rb:55:in `require'
    from -e:1:in `<main>'

すべてのクラスで同じ問題がありますが、繰り返しますが、アプリケーションは完全に動作します。私はMac OSで開発し、アプリはdebian 8で本稼働しています。私のモデルは、検証済みという正しい名前が付けられています。ありがとう

27
Alexandre

私はこの問題を抱えていて、ジョブファイルの1つをTweakした後にそれが起こったことに気付きました。修正したのは、スプリングローダーを再起動することでした。ただ走れ

spring stop

次に、Rails console通常どおりにロードする必要があります。

84
rewolf

私はこれと同じ問題を抱えていました rewolfの答え 上記で一時的に解決されました一時的に

彼の答えに追加するだけです:

以下のコマンドを実行して spring gemを停止した後

spring stop

bin/実行可能ファイルをupspringing(からスプリングgemを削除)することで、この問題を永久に修正することもできます

bin/spring binstub --remove --all

または

spring binstub --remove --all

以下のコマンドを実行して、Railsコンソールを本番環境に移行します

Rails c --environment=production

また、これが今後発生しないようにするには、 spring gemがGemfileのdevelopmentおよびtestグループにのみ存在するようにしてください。

さらに、本番環境では、必ず--without development test引数をbundle installコマンドに提供してください。

bundle install --without development test

いつもや普通ではない

bundle install

注意:参考として、コマンドRails cまたはRails consoleを実行すると、以下の出力が表示されます。

プロセス26651でSpringプリローダーを介して実行中警告:Springは本番稼働中です。これを修正するには、Spring GemがGemfileのdevelopmentおよびtestグループにのみ存在し、本番環境では常にbundle install --without development testを使用していることを確認してください

spring gemが運用環境で実行されていることを示しているため、停止するか、bin実行可能ファイルから完全に削除する必要があります。

それで全部です。

これがお役に立てば幸いです

0
Promise Preston