【问题标题】:NameError: uninitialized constant CarrierWave::Storage::Fog in Heroku LogsNameError:Heroku 日志中未初始化的常量 CarrierWave::Storage::Fog
【发布时间】:2015-07-07 01:50:20
【问题描述】:

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

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

在 heroku 日志中,当我 $heroku restart 时出现此错误

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

有什么想法吗?我和我的朋友都在摸不着头脑......

【问题讨论】:

  • 您究竟在哪里创建了这个carrierwave.rb 文件?
  • 您还可以查看一些演示应用程序,例如github.com/trevorturk/carrierwave-heroku 并查看此qiita.com/kimihito_/items/3ff9c0c4407447ee3ab3
  • 我看到您正在从环境变量中加载 S3 密钥。您是否确保在 Heroku 上设置了这些环境变量?另外,您在部署应用程序时是否遇到任何错误?也许在部署期间没有成功安装 CarrierWave 或其他什么?
  • 这可能是个愚蠢的问题,但您的 Gemfile 中有 gem 'fog' 吗?
  • 我刚刚更新了carrierwave gem,似乎他们已经更新了配置中的所需信息:github.com/carrierwaveuploader/carrierwave#using-amazon-s3 它给了我同样的错误信息,更新配置解决了它。跨度>

标签: ruby-on-rails ruby ruby-on-rails-4 heroku amazon-s3


【解决方案1】:

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

在您的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'

请参阅the carrierwave github 了解更多信息。

【讨论】:

    【解决方案2】:

    拉了几个小时的头发后,我终于确定这似乎来自最近的issue with 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)
    

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

    【讨论】:

      【解决方案3】:

      经过进一步审查,我决定完全放弃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
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2019-03-28
        • 1970-01-01
        • 2012-11-25
        • 2018-01-19
        • 1970-01-01
        • 2013-11-04
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多