载波错误:版本不存在!在Rails中

时间:2019-10-19 16:46:52

标签: ruby-on-rails imagemagick carrierwave

我在Rails 5.2.3中使用Carrierwave(2.0.2,0.11.2)。而且我对上载图片的版本非常感兴趣。  Imagemagick是最新版本,已安装宝石载波,Rmagick和Minimagick。 一切正常,应该使用默认创建的两个版本且未在uploaders / image_uploader.rb文件中添加注释的两个版本: 就像这样:

version :large do
  process resize_to_fill: [500,500]
end

version :thumb from :large do
  process resize_to_fit: [50, 50]
end

version :long do
  process resize_to_fill: [500,200]
end

我的模型如下:

class Slide < ApplicationRecord
  mount_uploader :image, ImageUploader

  before_save :update_image_attributes
  after_save :recreate_delayed_versions!

  validates :image_title, presence: true
  validates :display, presence: true
  validates :order, presence: true
  validates_presence_of :image
  validates_integrity_of :image
  validates_processing_of :image

  def recreate_delayed_versions!
     image.recreate_versions!(:thumb,:large,:long)
  end

  private

  def update_image_attributes
    if image.present? && image_changed?
      self.image_content_type = image.file.content_type
      self.image_file_size = image.file.size
    end
  end
end

以:原始大小,:large和:thumb版本处理,缩放和保存上载的图像...都很好。 但是,如果我尝试创建另一个版本或重命名现有版本,例如“ version:long”,则不会创建它,并且在我看来异常被捕获为:“ Version long不存在!” 我确实尝试了几种不同的版本名称,版本数量,名称(如双引号),引号,还阅读了Carrierwave / versions.rb的源代码,阅读了文档,但仍然找不到任何这种行为的原因。只有这两个版本工作正常,没有其他工作。您能帮我吗? 谢谢!

1 个答案:

答案 0 :(得分:0)

重命名版本或添加新版本后,您需要通过调用以下命令来重新创建这些版本:

User.find_each do |user|
  user.avatar.recreate_versions!
end

可以找到完整的文档here