2012-03-03 39 views
7

我想弄清楚如何設置CarrierWave與霧和亞馬遜S3工作。在S3上,我有一個桶,「bucket1」和文件夾「images」。上傳工作正常。例如,圖片可能會被上傳到https://s3.amazonaws.com/bucket1/images/picture/pic1.jpg的形式。然而,在show show中,當我調用image_url幫手時,我得到了https://s3.amazonaws.com/images/picture/pic1.jpg。我在這裏錯過了什麼?CarrierWave和霧,S3存儲桶和store_dir配置

#config/initializers/carrierwave.rb 
CarrierWave.configure do |config| 
    config.fog_credentials = { 
    :provider    => 'AWS', 
    :aws_access_key_id  => 'aws_key', 
    :aws_secret_access_key => 'aws_secret' 
    } 
    config.fog_directory = 'bucket1' 
    config.fog_host  = 'https://s3.amazonaws.com' 
    config.fog_public  = true 
    config.fog_attributes = {'Cache-Control'=>'max-age=315576000'} 
end 

#app/uploader/image_uploader.rb 
def store_dir 
    "images/#{model.class.to_s.underscore}" 
end 

#app/views/pictures/show.html.erb 
<%= image_tag @picture.image_url if @picture.image? %> 
+0

你在Heroku託管呢? – noob 2012-03-05 02:56:24

+0

我通過HostGator(dev)&EC2(prod)託管它自己 – 2012-03-05 08:34:47

回答

4

嘗試取出

config.fog_host = 'https://s3.amazonaws.com'

配置,而是把

存儲:霧

在上傳。它可能會覆蓋您提供的實際路徑。

+0

我以前都配置過兩個配置。我的修復只是爲了移除fog_host。現在它上傳到https://bucket1.s3.amazonaws.com/images/picture/image_name.jpg。這工作得很好! – 2012-03-06 05:13:36

1

儘管與這個特定問題沒有直接關係,但它認爲以下信息既相關又有幫助。

如果您使用的是S3非公鏈接,您可以控制與fog_authenticated_url_expiration配置參數這些鏈接的TTL:

... 
config.fog_public = false 
config.fog_authenticated_url_expiration = 600 # 10 minutes 
...