首页 文章

未初始化的常量CarrierWave :: Storage ::与Google Cloud 端存储一起使用

提问于
浏览
2

我见过很多其他人遇到过类似的问题但是没有一个列出的解决方案适用,所以我希望这个很棒的社区可以帮助我 .

我正在尝试使用sitemap_generator gem,但我使用Heroku主持,因此我尝试按照他们的文档here使用Carrierwave将站点 Map 上传到Google Cloud 端存储 . 我已经使用谷歌 Cloud 上传我的图像与所有工作正常,所以我希望它是直截了当但文件没有上传 . 文档说您需要添加:

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 'fog'
gem 'carrierwave', github: 'carrierwaveuploader/carrierwave'

我见过很多人使用AWS同样的错误,但他们的解决方案是改为使用雾宝石而不是雾 - aws(我已经在做)并且需要雾/ aws . 我测试过这样:

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

但仍然有同样的问题 .

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

非常感谢

2 回答

  • 0

    我在Amazon S3上使用fog-aws时遇到了同样的错误 . 如果存储是雾,似乎这个错误发生,无论是亚马逊s3还是谷歌 Cloud .

    我使用了carrierwave gem上传用户 Profiles 图片,所以我通过在凭据配置后移动存储配置解决了这个问题,如下所示:

    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 .

    添加我找到上述解决方案的链接 .

    Medium Carrierwave Fog

  • 0

    我知道这篇文章是7个月大,但我只是浪费了36小时试图实现同样的宝石......没有运气 . 文档似乎有点过时了 .

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

    尝试使用这个宝石CarrierWaveUploader与谷歌集成 .

    carrierwave-google-storage github

相关问题