使用Carrierwave的CDN(Cloudfront)缓存失效

时间:2012-11-03 00:56:22

标签: ruby-on-rails carrierwave amazon-cloudfront

我正在使用carrierwave允许用户上传具有上传后裁剪功能的图片,问题是版本是否已创建,CDN会立即抓住他们,当用户裁剪时他们看不到更改,因为Cloudfront缓存必须失效并花费相当长的时间自己刷新。

我认为将版本号放在文件名上可能是排序缓存无效的一种好方法,如何使用Carrierwave实现呢?

这是最好的方法吗?

3 个答案:

答案 0 :(得分: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 :(得分:7)

要使网址技巧在Amazon CloudFront CDN上运行,请记住在您的发行版中启用查询字符串。转到行为选项卡并启用“转发查询字符串”。

答案 2 :(得分:5)

您可以在carrierwave wiki上找到有关如何操作的详细信息:

https://github.com/jnicklas/carrierwave/wiki/How-to%3A-Create-random-and-unique-filenames-for-all-versioned-files