使用Rails4和CarrierWave不会刷新Cloudinary图像

时间:2014-08-06 14:56:01

标签: ruby-on-rails-4 carrierwave cloudinary

我使用Cloudinary和CarrierWave从我的Rails应用程序上传图像,它运行正常。

我的要求是用户可以拥有一个图像,因此如果用户已经有一个图像,并且他/她上传了一个新图像,则新图像应该覆盖前一个图像。

我的问题是,当我将新图像上传到Cloudinary时,它不会使之前的图像无效,因此旧图像仍显示为用户图像。

然后我找到了一个名为invalidate的选项并尝试使用它,但没有运气。

这是我的Cloudinary班级

class PictureUploader < CarrierWave::Uploader::Base
  include Cloudinary::CarrierWave

  version :show do
    process :invalidate => true 
  end
end

和我的观点

recipe.picture_url(:show)

但这显示旧图像而不是新图像。我错过了什么?

1 个答案:

答案 0 :(得分:3)

首次访问Cloudinary图像时,它会缓存在CDN中。 您确实可以通过在保留公共ID的同时重新上传来更新图像,但是如果您访问相同的URL,则可能仍然可以使用图像的CDN缓存版本。

您可以通过CDN告知Cloudinary使图像无效,但请注意,启用invalidate参数应包含在上传过程中,而不是“版本”块中,因为在重新启用时会应用无效上传而非发货。另请注意,失效可能需要一个小时才能完全通过CDN传播。

建议改用versions component。将“版本”组件添加到URL会导致Cloudinary强制传递最新版本的映像,同时绕过CDN缓存版本。每次上传调用都会返回更新的版本值。欲获得更多信息: http://cloudinary.com/documentation/rails_image_manipulation#image_versions

虽然传播失效需要一段时间,但“版本”组件会立即生效。