使用Fog和Amazon S3的公共URL

时间:2012-03-22 17:32:17

标签: ruby-on-rails ruby-on-rails-3 ruby-on-rails-3.1 ruby-on-rails-plugins

所有RubyGems的版本。我使用Ruby on Rails 3.1.3,Ruby 1.9.2,CarrierWave 0.5.8和Fog 1.1.2。

我正在使用CarrierWave RubyGem进行图像上传,使用Fog RubyGem进行Amazon S3文件上传。

在我的CarrierWave初始化程序文件中,我有:

CarrierWave.configure do |config|
 config.fog_credentials = {
    provider: 'AWS',
    aws_access_key_id: 'xxx',
    aws_secret_access_key: 'xxx'
  }
  if Rails.env.production?
    config.fog_directory = 'bucket1'
  elsif Rails.env.development?
    config.fog_directory = 'bucket2'
  else
    config.fog_directory = 'bucket3'
  end

  config.fog_public = false
  config.fog_authenticated_url_expiration = 60
end

我有一个上传者文件:

class PageAttachmentUploader < CarrierWave::Uploader::Base
 CarrierWave.configure do |config|
   if Rails.env.development? || Rails.env.development? || Rails.env.production?
    config.fog_public = true
   end
  end

 storage :fog
end

我有两个上传者文件。我希望将其设置为私有,将其设置为公开。

我正在尝试在调用PageAttachmentUploader时覆盖CarrierWave配置并将URL设置为public。这在本地计算机中就像魅力一样,但在登台,沙箱和生产中不起作用。

我在CarrierWave初始化程序中更改了config.fog_public = true。即使这在沙盒中也不起作用。我该如何解决这个问题?

2 个答案:

答案 0 :(得分:23)

不,你不应该直接在你的上传者中使用CarrierWave.configure,因为它会改变所有上传者的默认配置,而不仅仅是每个上传者。

我不知道这是否是最佳解决方案,但您可以通过在上传器中设置类方法直接更改默认雾配置,如下所示:

class ImageUploader < CarrierWave::Uploader::Base
  storage :fog

  def self.fog_public
    true # or false
  end
end

答案 1 :(得分:1)

实际上,最好的方法(我发现)是执行以下操作:

class ImageUploader < CarrierWave::Uploader::Base
  storage :fog

  configure do |c|
    c.fog_public = true # or false
  end
end

这样做感觉更符合CarrierWave的风格。