NameError:在rails 4.1.5上使用Carrierwave时未初始化的常量Article :: ImageUploader

时间:2014-09-07 15:44:18

标签: ruby-on-rails-4 carrierwave

我正在学习rails 4.1.5

我收到了这个错误:

2.1.1 :008 > Article
NameError: uninitialized constant Article::ImageUploader
    from /Volumes/disk0s4/www/rails/blog/app/models/article.rb:4:in `<class:Article>'
    from /Volumes/disk0s4/www/rails/blog/app/models/article.rb:1:in `<top (required)>'
    from (irb):8
    from /Users/didin/.rvm/gems/ruby-2.1.1/gems/railties-4.1.5/lib/rails/commands/console.rb:90:in `start'
    from /Users/didin/.rvm/gems/ruby-2.1.1/gems/railties-4.1.5/lib/rails/commands/console.rb:9:in `start'
    from /Users/didin/.rvm/gems/ruby-2.1.1/gems/railties-4.1.5/lib/rails/commands/commands_tasks.rb:69:in `console'
    from /Users/didin/.rvm/gems/ruby-2.1.1/gems/railties-4.1.5/lib/rails/commands/commands_tasks.rb:40:in `run_command!'
    from /Users/didin/.rvm/gems/ruby-2.1.1/gems/railties-4.1.5/lib/rails/commands.rb:17:in `<top (required)>'
    from /Volumes/disk0s4/www/rails/blog/bin/rails:8:in `<top (required)>'
    from /Users/didin/.rvm/rubies/ruby-2.1.1/lib/ruby/2.1.0/rubygems/core_ext/kernel_require.rb:55:in `require'
    from /Users/didin/.rvm/rubies/ruby-2.1.1/lib/ruby/2.1.0/rubygems/core_ext/kernel_require.rb:55:in `require'
    from -e:1:in `<main>'

我的档案:article.rb

class Article < ActiveRecord::Base    
    validates_presence_of :title, :body
    belongs_to :user
    mount_uploader :image, ImageUploader
end

运行rails console

时出错

当我在控制台上写一个单词'文章'时,它会引发上面的错误,但是当article.rb文件中的这一行mount_uploader :image, ImageUploader被删除时,它正常工作。

当该行恢复时,错误再次出现。所以似乎错误是由那条线引起的,但我不确定。

任何人都可以解决这个问题,请...

感谢您的阅读和回答: - )

12 个答案:

答案 0 :(得分:69)

我知道这已经晚了几个月但我自己偶然发现了这个问题。我的解决方案是粘贴

  

要求&#39; carrierwave / orm / activerecord&#39;

进入config / environment.rb文件。只需将其附加到最后。

我的环境: Ruby 2.1.2p95; Rails 4.1.7; Carrierwave-0.10.0

答案 1 :(得分:30)

我将此添加到application.rb

require 'carrierwave'
require 'carrierwave/orm/activerecord'

Rails 4.2.0,Ruby 2.2.2,Carrierwave 0.10.0

答案 2 :(得分:21)

我把它放在这里,以防万一..

如果您使用的是spring gem,那么您必须重新启动&#34;通过更改config/application.rb或关闭并打开终端,或:$ bin/spring stop

您可以在此处检查其流程生命周期(向右滚动):

$ ps aux | grep spring
alexey           55936   0.0  0.9  2645908  78440   ??  Ss   Thu06PM   0:13.17 spring app    | myapp | started 26 hours ago | development mode
alexey           81963   0.0  0.0  2481764   1608   ??  S    Sat11PM   0:01.91 spring server | myapp | started 141 hours ago

如果需要可以杀死它。

更多信息:https://github.com/rails/spring

答案 3 :(得分:7)

你在使用春天吗?

我有两个终端窗口,一个用于服务器,另一个用于控制台。

重新启动我的服务器并再次进入控制台后,错误消失了。

我没有在application.rb中添加任何行

Rails 4.2.4,Ruby 2.3.0,Carrierwave 0.10.0 a2c93fe

答案 4 :(得分:4)

我假设您正在使用CarrierWave gem进行文件上传。你检查过它是否正确安装了吗? 您可以发出命令来检查:

bundle show carrierwave

在我的情况下,我将捆绑安装在我运行rails console的不同终端上。 HTH!

答案 5 :(得分:3)

另一个提示尝试:打开刚刚生成的上传内容。确保上传器类的名称与您在模型中添加的类的名称相匹配。

答案 6 :(得分:2)

如果rails app&#39;中出现错误specs只有你可能会失踪

require 'rails_helper'

在顶部:)

答案 7 :(得分:0)

我收到此错误,然后在重新启动服务器后工作正常。

答案 8 :(得分:0)

试试这个 在appliccation.rb正确的模块名称 这对我来说解决了同样的问题

module CorrectName #OldName  <---------------
     # Do not swallow errors in after_commit/after_rollback callbacks.
    config.active_record.raise_in_transactional_callbacks = true
  end
end

答案 9 :(得分:0)

就我而言,我忘记了rails g uploader image。完成后,它可以正常工作。

答案 10 :(得分:0)

对我来说,我同时卸载了以下两个宝石

gem 'spring'
gem 'spring-watcher-listen', '~> 2.0.0'

答案 11 :(得分:0)

在我的'user.rb'模块文件中,我添加了以下几行:

  mount_uploader :photo, PhotoUploader
  mount_uploader :coverimage, CoverimageUploader

我必须退出并