ruby-on-rails-4 - Cloudinary 图像对于 Rails4 和 CarrierWave 来说并不刷新

标签 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)

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

最佳答案

当第一次访问 Cloudinary 图像时,它会被缓存在 CDN 中。 您确实可以通过在保留公共(public) ID 的情况下重新上传来更新图像,但如果您访问相同的 URL,您可能仍会收到图像的 CDN 缓存版本。

您可以告诉 Cloudinary 通过 CDN 使图像无效,但请注意,启用 invalidate 参数应包含在上传过程中,而不是包含在“versions” block 内,因为应用了无效重新上传时而非交付时。另请注意,失效可能需要一个小时才能通过 CDN 完全传播。

建议使用versions component反而。将“版本”组件添加到 URL 会告诉 Cloudinary 强制传递最新版本的图像,同时绕过 CDN 缓存版本。每次上传调用都会返回更新的版本值。了解更多信息: http://cloudinary.com/documentation/rails_image_manipulation#image_versions

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

关于ruby-on-rails-4 - Cloudinary 图像对于 Rails4 和 CarrierWave 来说并不刷新,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25163666/

相关文章:

ruby-on-rails - 使用 Rspec 测试 ActiveModel::Serializer 类

ruby-on-rails-4 - 在 Elastic Beanstalk 环境中运行 Rails rake 任务

ruby-on-rails - Rails 更新 4.1.0 后,next 方法 (Class.first) 不起作用

ruby-on-rails - 载波上传图片

javascript - 图像对象只能记录到控制台

ruby-on-rails-4 - 在 Rails 中清理用户输入的最佳方法

ruby-on-rails - 使用 Carrierwave 和 MiniMagick 上传图像时的 Errno::ENOENT

ruby-on-rails - 将 carrierwave 与 Bearer token 授权一起使用

javascript - 将图像上传到 Cloudinary Express.js React Axios post 请求

ruby-on-rails - Rails + Mongoid + Carrierwave + Cloudinary