【问题标题】:uninitialized constant CarrierWave::Storage::Fog with Google Cloud Storage未初始化的常量 CarrierWave::Storage::Fog 与 Google Cloud Storage
【发布时间】:2016-11-21 21:03:52
【问题描述】:

我看到很多其他人遇到与我类似的问题,但列出的解决方案都不适用,所以我希望这个很棒的社区可以帮助我。

我正在尝试使用 sitemap_generator gem,但我使用 Heroku 托管,因此我尝试按照他们的文档 here 使用 Carrierwave 将站点地图上传到 Google Cloud Storage。我已经在使用谷歌云上传我的图片,一切正常,所以我希望它会很简单,但是文件没有被上传。文档说您需要添加:

config.storage = :fog

到您的carrierwave配置文件,但是每当我添加它时,我都会收到以下错误:

gems/carrierwave-49fdad1ec6ca/lib/carrierwave/uploader/configuration.rb:75:in `eval': uninitialized constant CarrierWave::Storage::Fog (NameError)

我的 Carrierwave 配置如下所示:

CarrierWave.configure do |config|
     config.cache_dir = "#{Rails.root}/tmp/"
     config.storage = :fog
     config.fog_credentials = {
         :provider => 'Google'
     }
     config.fog_directory = 'bucket-name'
     config.asset_host = 'https://domain.storage.googleapis.com'
end

(fog_directory 和asset_host 被替换为虚拟值)

在我的 gem 文件中,我有:

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

我看到很多人在使用 AWS 时遇到同样的错误,但他们的解决方案是更改为使用雾 gem 而不是雾aws(我已经在这样做)并且需要雾/aws。我已经这样测试过:

gem 'fog', require: 'fog/google'

但还是有同样的问题。

谁能建议我可以做些什么来尝试解决这个问题?任何帮助将不胜感激!

非常感谢

【问题讨论】:

    标签: ruby-on-rails ruby-on-rails-4 carrierwave fog sitemap-generator-gem


    【解决方案1】:

    我在 Amazon S3 上使用雾 aws 时遇到了同样的错误。如果存储是雾,似乎会发生此错误,无论是 amazon s3 还是 google cloud。

    我使用carrierwave gem上传用户资料图片,所以我通过在凭据配置之后移动存储配置来解决这个问题:

    CarrierWave.configure do |config|
      if Rails.env.staging? || Rails.env.production?
        config.fog_provider = 'fog/aws'
        config.fog_credentials = {
          provider: 'AWS',
          aws_access_key_id: ENV['AWS_ACCESS_KEY_ID'],
          aws_secret_access_key: ENV['AWS_SECRET_ACCESS_KEY'],
          region: ENV['AWS_REGION']
        }
        config.storage = :fog
        config.fog_directory = ENV['S3_BUCKET']
        config.fog_public    = true
        config.fog_attributes = { cache_control: "public, max-age=#{365.days.to_i}" }
      else
        config.storage = :file
        config.enable_processing = Rails.env.development?
      end
    end
    

    另一种解决方案是在上述文件的顶部添加require 'carrierwave/storage/fog'。对我来说,该文件是 initializers 目录下的 carrier_wave.rb。

    在我找到上述解决方案的地方添加链接。

    MediumCarrierwaveFog

    【讨论】:

      【解决方案2】:

      我知道这篇文章已有 7 个月的历史,但我只是浪费了 36 小时来尝试实现相同的 gem……没有运气。文档似乎有些过时了。

      如果你问我,fog-google 在这一点上是不必要的!

      试试这个 gem,将 CarrierWaveUploader 与谷歌集成。

      carrierwave-google-storage github

      【讨论】:

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