2012-11-03 59 views
7

我使用carrierwave允許用戶上傳圖片並具有上傳後的裁剪能力,問題是版本被創建並且CDN立即捕獲它們,當用戶裁剪它們時請參閱更改,因爲Cloudfront緩存必須失效,並且需要相當長的時間才能自行刷新。使用Carrierwave的CDN(Cloudfront)緩存失效

我認爲在文件名上放置版本號可能是一種排序無效緩存的好方法,如何實現使用Carrierwave?

這是最好的方法嗎?

+0

如何進行裁剪?通過CarrierWave通過Rmagick? – deefour

+0

剪裁工作沒有問題,它使用MiniMagick,我可以查看服務器上的裁剪圖像(不通過CDN) – Ryan

+0

我問的是,你是否獨立於CarrierWave上傳過程進行裁剪? – deefour

回答

14

我有同樣的問題與CloudFlare的

這裏我hackish的解決方案:把的updated_at時間戳在PARAMS。應與所有CDN

class AssetUploader < CarrierWave::Uploader::Base 

    def url(options={}) 
    super.split("?v=")[0]+"?v=#{model.updated_at.to_time.to_i}" rescue super 
    end 

end 
+1

「hackish」,但這不是一個乾淨的方式嗎? –

+0

它的工作原理!但我不明白。這個「v」參數用於什麼?幕後發生了什麼?謝謝! –

+0

它用來完美的工作!問題是我現在開始使用carrierwave-backgrounder,它不會再工作了。任何見解? –

7

工作,使亞馬遜CloudFront的CDN的URL招,你要記得,使查詢字符串在你的分發。轉到行爲選項卡並啓用「轉發查詢字符串」。

+0

花了幾個小時弄清楚什麼是錯的,直到我看到你的答案。非常感謝! – Sbbs