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

Rya*_*yan 7 ruby-on-rails carrierwave amazon-cloudfront

我正在使用carrierwave来允许用户上传具有上传后裁剪功能的图像,问题是版本被创建并且CDN立即抓住它们当用户裁剪时他们没有看到更改,因为Cloudfront缓存必须无效并且需要相当长的时间来自己刷新.

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

这是最好的方法吗?

m4t*_*m4t 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
Run Code Online (Sandbox Code Playgroud)


Ale*_*rue 7

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


Eve*_*ani 5

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

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