名称错误:未初始化的常量 CarrierWave::Storage::Fog in Heroku 日志



您好,我刚刚将 AWS S3 存储桶添加到我的应用程序中。

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

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

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

我的运营商波.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 中的载波修订版。

这是我的 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)

这是我的宝石文件。仅供参考。

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

最新更新