【问题标题】:Rails console in production: NameError: uninitialized constant生产中的 Rails 控制台:NameError:未初始化的常量
【发布时间】:2017-01-19 04:06:04
【问题描述】:

我有一个 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 上运行在生产环境中。 我的模型名称正确,我已验证。 谢谢

【问题讨论】:

  • 输入::User.all是否有效?
  • 谢谢,但是在新的 ssh 会话后它可以工作
  • 突然遇到同样的问题。不知道发生了什么

标签: ruby-on-rails console production


【解决方案1】:

我遇到了这个问题,并在我对我的一个工作文件进行了调整后意识到它发生了。 修复它的是重新启动弹簧装载机。跑吧

spring stop

那么下次你运行 rails console 时它应该会正常加载。

【讨论】:

  • 你真是个救命恩人!三个多星期以来,我一直被困在这个问题上。你真的为我保存了它:)
  • @JagjotSingh 抱歉,您没有早点看到!也让我困惑了很久!很高兴它现在对您有所帮助!
  • 在这根头发上掉了几根白发。谢谢。
  • 这困扰了我一段时间,但我的确实是随机的,就像,1 分钟后回来,它会随机修复,但今天我真的需要它,感谢它.. 一对夫妇长期解决方案:1- 在生产中禁用它github.com/rails/spring#temporarily-disabling-spring 或使用捆绑包bundler.io/v1.12/groups.html 的组。我是如此,如此肯定它会覆盖 Gemfile.lock,但显然我只是个混蛋(我说了太多次 xd)
  • fwiw spring stop 对我不起作用,但我确实通过ps -ef | grep spring 进行了弹簧处理。杀死该进程后,控制台如前所述加载。
【解决方案2】:

我也遇到了同样的问题,上面的rewolf's answer 为我解决了暂时

只是为了补充他的答案:

通过运行以下命令停止 spring gem 后

spring stop

您还可以永久通过弹出(从中删除 spring gem)bin/ 可执行文件来解决此问题:

bin/spring binstub --remove --all

或者

spring binstub --remove --all

您现在可以运行以下命令以进入生产环境中的 Rails 控制台

rails c --environment=production

此外,为避免这种情况在后续场合发生,请努力确保 spring gem 仅出现在 Gemfile 中的 developmenttest 组中。

此外,当您在生产中时,请确保始终为 bundle install 命令提供 --without development test 参数

bundle install --without development test

而不是通常或常见的

bundle install

请注意:作为指示,每当您运行命令 rails crails console 时,您都会看到以下输出:

在进程 26651 中通过 Spring 预加载器运行 警告:Spring 正在生产中运行。要解决此问题,请确保 spring gem 仅存在于您的 Gemfile 中的 developmenttest 组中,并确保您始终在生产中使用 bundle install --without development test

这表明spring gem 正在您的生产环境中运行,应该停止或完全从您的 bin 可执行文件中删除它。

就是这样。

我希望这会有所帮助

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2015-10-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-07-15
    • 2017-07-10
    • 2016-10-22
    相关资源
    最近更新 更多