【问题标题】:CDN (Cloudfront) Cache Invalidation using Carrierwave使用 Carrierwave 的 CDN (Cloudfront) 缓存失效
【发布时间】:2012-10-23 16:29:56
【问题描述】:

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

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

这是最好的方法吗?

【问题讨论】:

  • 如何进行裁剪?通过 CarrierWave 通过 Rmagick?
  • 裁剪工作没有问题,它使用 MiniMagick,我可以在服务器上查看裁剪后的图像(而不是通过 CDN)
  • 我要问的是,您是在独立于 CarrierWave 上传过程进行裁剪吗?
  • 不,是上传后生成默认裁剪。

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


【解决方案1】:

我对 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

【讨论】:

  • “hackish”,但这实际上不是一种干净的方式吗?
  • 有效!但我不明白。这个“v”参数是做什么用的?幕后发生了什么?谢谢!
  • 它曾经完美运行!问题是现在我开始使用carrierwave-backgrounder,它不再起作用了。有什么见解吗?
【解决方案2】:

要使 url 技巧在 Amazon CloudFront CDN 上起作用,只需记住在您的分配中启用查询字符串。转到行为选项卡并启用“转发查询字符串”。

【讨论】:

  • 花了几个小时弄清楚出了什么问题,直到我阅读了您的答案。非常感谢!
【解决方案3】:

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

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2021-12-16
    • 2012-04-14
    • 2019-02-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-01-23
    相关资源
    最近更新 更多