【问题标题】:Why does carrierwave cause the NameError: uninitialized constant Micropost::PictureUploader error?为什么carrierwave会导致 NameError: uninitialized constant Micropost::PictureUploader 错误?
【发布时间】:2017-05-16 14:19:00
【问题描述】:

在 Hartl Rails 教程章节13.4.1 Basic image upload 中,我们添加了用于图像上传的carrierwave gem。

但是,在生成上传器并将迁移添加到 Microposts 模型后,我在测试中不断收到此错误:

NameError: uninitialized constant Micropost::PictureUploader

在谷歌搜索后,我可以通过将其添加到我的 environments.rb 来解决此问题:

require 'carrierwave/orm/activerecord'

但我觉得我做错了什么,因为 Hartl 没有这样做,他在第 13.4.1 章的末尾假设你的测试应该在重新启动服务器后通过。

我做错了吗?

更新:

将该行添加到我的environments.rb 文件后,我的测试通过了。然后,一旦他们通过,我就可以删除那条线,测试继续通过。这就像初始化一次所需的常量。

我会说我在第一次运行测试之前忘记运行rails db:migrate,但我继续删除测试数据库,重新创建它,运行迁移,重新启动服务器并没有修复它.

仍然对出了什么问题感到困惑。

【问题讨论】:

  • 我的猜测是,有时重启 rails 服务器是不够的,有时您还需要停止 Spring 预加载器:在命令行中尝试 spring stop 并告诉我们是否有帮助。
  • 我觉得这可能是问题所在。注意我的更新。我想我是因为在运行测试之前忘记运行 rails db:migrate 造成的。然后在我从环境.rb 文件中添加require 'carrierwave/orm/activerecord' to my environments.rb file the tests passed. They still passed after I removed require 'carrierwave/orm/activerecord'` 之后。仍然不知道是什么原因造成的,这是我的问题,但目前可能无法找到。
  • @BoraMa 我遇到了同样的问题。 “rails test”给了我同样的问题。我做了“spring stop”然后“rails test”,它是固定的。
  • 重启 Rails 服务器。这对我有用

标签: ruby-on-rails carrierwave railstutorial.org


【解决方案1】:

BoraMauser782220 建议运行 spring stop 然后运行 ​​rails test 对我有用。无需将require 行添加到我的environments.rb

我还通过 WSL 在 Windows 上通过 JetBrains RubyMine 运行 Hartle 的教程。我发现在 RubyMine 中停止应用程序实际上并没有停止服务器。每次我停止并启动服务器时,另一个 Puma 实例开始运行。我必须重新启动整个应用程序才能终止所有潜在服务器。

您可以通过在命令行中输入ps aux | grep puma 来检查是否有多余的服务器在运行。

似乎与this问题有关

【讨论】:

    【解决方案2】:

    这有什么更新吗?我遇到了同样的问题,并通过添加解决了

    需要'carrierwave/orm/activerecord'

    到我的环境.rb。

    【讨论】:

      【解决方案3】:

      您可以尝试再次运行 Uploader 命令并再次启动您的服务器。为我工作。

      rails generate uploader Picture
      

      【讨论】:

      • 嘿,这个问题已经有 2 年历史了,不幸的是,这个项目已经没有了。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2012-12-30
      • 2020-11-28
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多