ruby-on-rails - 为什么carrierwave会导致NameError: uninitialized constant Micropost::PictureUploader错误?

标签 ruby-on-rails carrierwave railstutorial.org

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

但是,在生成 uploader 并将迁移添加到 Microposts 模型后,我的测试中一直出现此错误:

NameError: 未初始化常量 Micropost::PictureUploader

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

需要'carrierwave/orm/activerecord'

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

我做错了吗?

更新:

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

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

仍然对哪里出了问题感到困惑。

最佳答案

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

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

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

似乎与this有关问题

关于ruby-on-rails - 为什么carrierwave会导致NameError: uninitialized constant Micropost::PictureUploader错误?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44004065/

相关文章:

ruby-on-rails - 在 Rails 3 中使用作用域

mysql - ActiveRecord .last 和 ActiveRecord .last(1) 返回不同的结果

ruby-on-rails - 在表单提交后显示使用 Carrierwave/Sidekiq 上传到 S3 的图像

ruby-on-rails - 在集成测试中访问 session

ruby-on-rails - Ruby on rails 和 Node.js

ruby-on-rails - Rails 中的 Gmail 推送通知

ruby-on-rails - 如何从接受要在实例上下文中执行的 block 的类方法内部添加实例方法

ruby-on-rails - 在 CarrierWave 中,retrieve_from_store 做什么!做?

ruby-on-rails-4 - 如何测试文件是否上传到 Controller 中?

ruby-on-rails - Rails 教程 (M.Hartl) 第三版,第 8 章,为什么应用程序无法忘记登录状态?