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

Ruby on rails 使用Carrierwave的CDN(Cloudfront)缓存失效,ruby-on-rails,carrierwave,amazon-cloudfront,Ruby On Rails,Carrierwave,Amazon Cloudfront,我使用carrierwave允许用户上传图像,并在上传后进行裁剪,问题是版本会被创建,CDN会立即捕捉到,当用户裁剪时,他们看不到更改,因为Cloudfront缓存必须失效,并且需要相当长的时间才能自行刷新 我认为在文件名上添加版本号可能是使缓存失效的一个好方法,如何使用Carrierwave实现这一点 这是最好的方法吗 您可以在carrierwave wiki上找到有关如何操作的详细信息: 我对cloudflare也有同样的问题 这里是我的黑客解决方案:将更新后的时间戳_放入参数中。应与所有C

我使用carrierwave允许用户上传图像,并在上传后进行裁剪,问题是版本会被创建,CDN会立即捕捉到,当用户裁剪时,他们看不到更改,因为Cloudfront缓存必须失效,并且需要相当长的时间才能自行刷新

我认为在文件名上添加版本号可能是使缓存失效的一个好方法,如何使用Carrierwave实现这一点


这是最好的方法吗

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


我对cloudflare也有同样的问题

这里是我的黑客解决方案:将更新后的时间戳_放入参数中。应与所有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
类AssetUploader要在Amazon CloudFront CDN上使用url技巧,请记住在发行版中启用查询字符串。转到“行为”选项卡并启用“正向查询字符串”。

裁剪是如何执行的?通过Rmagick via CarrierWave?裁剪工作没有问题,它使用Minimagik,我可以在服务器上查看裁剪的图像(不是通过CDN)。我想问的是,您是否独立于CarrierWave上载过程进行裁剪?不,这是在上传和默认作物生成之后。我花了几个小时找出问题所在,直到我读到你的答案。非常感谢你!“hackish”,但这不是一种干净的方式吗?它很有效!但我不明白。这个“v”参数用于什么?幕后发生了什么?谢谢它过去工作得很好!问题是,现在我开始使用carrierwave backgrounder,它将不再工作。有什么见解吗?