NameError:未初始化的常量CarrierWave :: Storage :: Heroku日志中的雾

您好我刚刚将AWS S3 Bucket添加到我的应用程序中。

这是应用程序错误https://dry-atoll-6663.herokuapp.com/

在heroku日志中,当i $ heroku重新启动时,会出现此错误

2015-04-28T09:13:15.009823+00:00 app[web.1]: [3] ! Unable to load application: NameError: uninitialized constant CarrierWave::Storage::Fog 

我的Carrierwave.rb

 CarrierWave.configure do |config| config.fog_credentials = { # Configuration for Amazon S3 :provider => 'AWS', :aws_access_key_id => ENV['S3_ACCESS_KEY'], :aws_secret_access_key => ENV['S3_SECRET_KEY'] } config.fog_directory = ENV['S3_BUCKET'] end 

有任何想法吗? 我和我的朋友正在大开眼界……

感谢@Marcus在评论中正确回答这个问题。

config/initializers/carrierwave.rb文件中,您需要更新

 CarrierWave.configure do |config| # This is the old way, and broken config.storage = :fog 

 CarrierWave.configure do |config| # This is the new way! config.fog_provider = 'fog/aws' 

有关更多信息,请参阅carrierwave github 。

把头发拉了几个小时后,我终于确定这似乎来自最近的一期carrierwave (0.10.0)

感谢GitHub用户trantorLiu ,这就是解决这个问题的原因:

我也遇到过这个问题。 我通过在Gemfile.lock中指定旧的Carrierwave修订版来修复它

这是我的Gemfile.lock。 版本37cf31d对我不起作用,所以我回滚到cb1a5bf 。 然后一切都像过去一样有效。

 GIT remote: git://github.com/carrierwaveuploader/carrierwave.git revision: cb1a5bfc6601a4e5d0abb6bad17911d73dcb57e3 specs: carrierwave (0.10.0) activemodel (>= 3.2.0) activesupport (>= 3.2.0) json (>= 1.7) mime-types (>= 1.16) 

这是我的Gemfile。 仅供参考。

 gem 'fog', require: 'fog/aws' gem 'carrierwave', github: 'carrierwaveuploader/carrierwave' 

此外,如果它有帮助,这里我的config/initializers/carrierwave.rb

 CarrierWave.configure do |config| if Rails.env.development? config.storage = :file elsif Rails.env.test? config.storage = :file config.enable_processing = false else config.storage = :fog config.fog_credentials = { provider: 'AWS', aws_access_key_id: Rails.configuration.aws.access_key_id, aws_secret_access_key: Rails.configuration.aws.secret_access_key, } config.fog_directory = Rails.configuration.files.aws_bucket end end 

经过进一步审查,我决定完全放弃fog 。 我最终使用了carrierwave-aws 。 配置实际上是相同的。

我的新config/initializers/carrierwave.rb

 CarrierWave.configure do |config| if Rails.env.development? config.storage = :file elsif Rails.env.test? config.storage = :file config.enable_processing = false else config.storage = :aws config.aws_bucket = Rails.configuration.files.aws_bucket config.aws_acl = 'public-read' config.aws_credentials = { access_key_id: Rails.configuration.aws.access_key_id, secret_access_key: Rails.configuration.aws.secret_access_key, region: Rails.configuration.aws.region, } end end