Ruby on rails 轨道,载体波图像旋转。图像旋转后,它会显示一个旧版本的图像,该图像已经不存在';不存在。

Ruby on rails 轨道,载体波图像旋转。图像旋转后,它会显示一个旧版本的图像,该图像已经不存在';不存在。,ruby-on-rails,caching,carrierwave,image-rotation,Ruby On Rails,Caching,Carrierwave,Image Rotation,我做了一个rails项目,我使用carrierwave gem和jCrop jQuery插件来处理化身,我使用图像旋转。我已经用ajax实现了它,在旋转和保存新的图像位置后,我用图像路径呈现json。然后使用ajax:success,我把这个图像放到打开的croper表单中,继续处理头像。我看到,在每次请求后,图像都已旋转,但图像路径继续引用旋转前的旧版本图像。因此,我能够向用户显示第一个旋转结果(90度),因为其他旋转无论对图像是否有效,用户都无法看到,因为图像路径继续引用旧版本的图像 阿凡达

我做了一个rails项目,我使用carrierwave gem和jCrop jQuery插件来处理化身,我使用图像旋转。我已经用ajax实现了它,在旋转和保存新的图像位置后,我用图像路径呈现json。然后使用ajax:success,我把这个图像放到打开的croper表单中,继续处理头像。我看到,在每次请求后,图像都已旋转,但图像路径继续引用旋转前的旧版本图像。因此,我能够向用户显示第一个旋转结果(90度),因为其他旋转无论对图像是否有效,用户都无法看到,因为图像路径继续引用旧版本的图像

阿凡达上传器.rb

class AvatarUploader < CarrierWave::Uploader::Base

  include CarrierWave::RMagick

  # Choose what kind of storage to use for this uploader:
  storage :file

  def store_dir
    "uploads/#{model.class.to_s.underscore}/#{mounted_as}/#{model.id}"
  end

  def serializable_hash
    model.read_attribute :url
  end

  def extension_white_list
    %w(jpg jpeg png)
  end

  version :large do
    process :rotate!#by default 0 degrees
    process :resize_to_limit => [500, 500]
  end

  version :rotation, from_version: :large do
  end

  def rotate!
    manipulate! do |img|
      img.rotate!(model.rotation_value)
    end
  end
我猜原因是CarrierWawe缓存图像。 我试图找出如何禁用缓存,但发现这是不可能的, 这对我不起作用

对我来说,重要的是,在图像旋转后,它被保存在服务器上,因为旋转后,图像应该异步加载到jCrop表单中,用户可以根据需要裁剪化身

如何禁用缓存,或者可能有其他解决方法?。 提前谢谢你的建议

class User::Avatar < ApplicationRecord
  mount_uploader :image, AvatarUploader
  belongs_to :user

  def rotate_avatar!
    #rotation angle I keep in a database
    update(rotation_value: rotation_value + 90)
    image.recreate_versions!
  end
end
class UsersController < ApplicationController

  def rotate_avatar
    avatar = @user.avatars.last
    avatar.rotate_avatar!
    render json: {avatar: avatar.image_url(:rotation)}
  end
$(document).on 'click', '.rotate-avatar-button', (e) ->
  $("form.rotate-avatar").bind 'ajax:success', (e, data, status, xhr) ->
    avatar_path = $.parseJSON(xhr.responseText)['avatar']
    $('#avatar-modal-box').html(JST["templates/cropper"]({img_path: avatar_path}))