【问题标题】:Rails: NameError: uninitialized constant Article::ImageUploader when using Carrierwave on rails 4.1.5Rails: NameError: uninitialized constant Article::ImageUploader when using Carrierwave on rails 4.1.5
【发布时间】:2014-09-07 15:44:17
【问题描述】:

我正在学习 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'时,它会引发上面的错误,但是当article.rb文件中的mount_uploader :image, ImageUploader这行被删除时它工作正常。

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

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

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

【问题讨论】:

    标签: ruby-on-rails-4 carrierwave


    【解决方案1】:

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

    需要'carrierwave/orm/activerecord'

    进入 config/environment.rb 文件。只需将其附加在末尾即可。

    我的环境: 红宝石 2.1.2p95 ; 导轨 4.1.7 ; Carrierwave-0.10.0

    【讨论】:

    • 谢谢,我按照指南跳过了这个。
    【解决方案2】:

    我将此添加到application.rb

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

    Rails 4.2.0、Ruby 2.2.2、Carrierwave 0.10.0

    【讨论】:

    • 我想在 CarrierWave 文档中指出:“确保在加载 ORM 后加载 CarrierWave,否则您需要手动要求相关扩展”
    • 第一行很可能不需要。它作为Bundler.require(*Rails.groups) 行的一部分执行。
    【解决方案3】:

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

    如果您使用的是 spring gem,那么您必须通过更改 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

    【讨论】:

    • 向 config/application.rb 添加空格并保存对我有用!
    • 值得注意的是,我尝试重新启动服务器并保护,但修改 application.rb 文件为我做了这件事(空格)。我从来没有尝试过重启终端,但现在我猜这也能做到。
    • 只是使用bin/spring stop 停止 spring gem 为我做了这件事。谢谢。
    【解决方案4】:

    你在用弹簧吗?

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

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

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

    Rails 4.2.4、Ruby 2.3.0、Carrierwave 0.10.0 a2c93fe

    【讨论】:

      【解决方案5】:

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

      bundle show carrierwave
      

      就我而言,我已经在运行 rails 控制台的不同终端上安装了捆绑包。 HTH!

      【讨论】:

      • 没错。谢谢!
      【解决方案6】:

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

      【讨论】:

        【解决方案7】:

        如果错误仅出现在 Rails 应用程序的规范中,您可能会丢失

        require 'rails_helper'
        

        在顶部:)

        【讨论】:

          【解决方案8】:

          退出并重新启动您的控制台。 在这种情况下,只需重新加载!解决不了。

          【讨论】:

            【解决方案9】:

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

            【讨论】:

              【解决方案10】:

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

              这种情况经常发生。在开发中,错误突然出现。上传者可能刚刚添加。卸下弹簧可以解决,但这是创可贴。简单的服务器重启通常是正确的解决方案。

              【讨论】:

                【解决方案11】:

                试试这个 在 application.rb 中正确的模块名称 这为我解决了同样的问题

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

                【讨论】:

                  【解决方案12】:

                  对我来说,我卸载了以下两个 gem

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

                  【讨论】:

                    【解决方案13】:

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

                      mount_uploader :photo, PhotoUploader
                      mount_uploader :coverimage, CoverimageUploader
                    

                    我不得不退出他们,

                    【讨论】:

                      【解决方案14】:

                      对于任何拥有预加载器(例如 Spring)的人,在卸载其他有用的可加速您的应用程序的预加载器之前,值得停止它,以便重新初始化加载路径并且 app/uploaders 中的任何上传器将被加载一次新的控制台或 Rails 进程启动。试试bin/spring stop。它会在必要时重新启动,现在上传者就位。

                      【讨论】:

                        猜你喜欢
                        • 1970-01-01
                        • 1970-01-01
                        • 1970-01-01
                        • 1970-01-01
                        • 1970-01-01
                        • 1970-01-01
                        • 2012-12-30
                        • 1970-01-01
                        • 1970-01-01
                        相关资源
                        最近更新 更多