4

所有RubyGems的版本。我正在使用Ruby on Rails 3.1.3,Ruby 1.9.2,CarrierWave 0.5.8和Fog 1.1.2。Fog和Amazon S3的公开URL

我正在使用CarrierWave 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 
我有两个上传文件

。我想要一个被设置为私人,一个被设置为公共。

我试图覆盖CarrierWave配置当PageAttachmentUploader被调用并将URL设置为公共。这在本地机器中很有魅力,但不适用于舞台,沙盒和制作。

我更改了CarrierWave intializer中的config.fog_public = true。即使这在沙箱中也不起作用。我该如何解决这个问题?

回答

23

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

我不知道这是最好的解决办法,但你可以直接像这样设置你的上传类的方法更改默认的雾配置:

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

    def self.fog_public 
    true # or false 
    end 
end 
+0

是的,多数民众赞成在正确的! fog_public:在上传文件中为我工作。谢谢! – user1286523 2012-03-23 14:30:21

+1

好吧,然后不要忘记投票这个答案:)! – 2012-03-23 17:25:28

+0

没有为我工作 – 2016-09-19 17:38:29

1

其实,最好的方法(我发现)要做到以下几点:

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

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

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