我正在使用carrierwave允许用户上传能够在上传后裁剪的图像,问题是版本被创建并且CDN立即捕获它们,当用户裁剪时他们看不到更改,因为必须使Cloudfront缓存失效并且需要相当长的时间才能自行刷新。
我认为将版本号放在文件名上可能是一种使缓存无效的好方法,如何使用 Carrierwave 来实现?
那是最好的方法吗?
我正在使用carrierwave允许用户上传能够在上传后裁剪的图像,问题是版本被创建并且CDN立即捕获它们,当用户裁剪时他们看不到更改,因为必须使Cloudfront缓存失效并且需要相当长的时间才能自行刷新。
我认为将版本号放在文件名上可能是一种使缓存无效的好方法,如何使用 Carrierwave 来实现?
那是最好的方法吗?
我对 cloudflare 有同样的问题
这是我的 hackish 解决方案:将 updated_at 时间戳放在参数中。应该适用于所有 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
要使 url 技巧在 Amazon CloudFront CDN 上起作用,只需记住在您的分配中启用查询字符串。转到行为选项卡并启用“转发查询字符串”。
您可以在carrierwave wiki上找到有关如何执行此操作的详细信息: