【问题标题】:Carrierwave error: version doesn't exist! in Rails载波错误:版本不存在!在 Rails 中
【发布时间】:2019-10-19 16:46:52
【问题描述】:

我在 Rails 5.2.3 中使用 Carrierwave (2.0.2, 0.11.2)。而且我很喜欢上传图片的版本。 Imagemagick 是最新版本,gems Carrierwave、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

上传的图像经过处理、缩放并以 :original size、:large 和 :thumb 版本保存在正确的文件夹中......一切都很好。 但是,如果我尝试创建另一个版本,或重命名现有版本,例如“版本:long”,它不会创建它,并且在我看来异常被捕获为:“版本长不存在!” 我确实尝试了几个不同的版本名称,版本数量,名称作为符号,引号中,还阅读了 Carrierwave/versions.rb 的源代码,阅读了文档,但仍然找不到这种行为的任何原因。只有这两个版本工作得很好,不是任何其他的。有人可以帮我吗? 谢谢!

【问题讨论】:

    标签: ruby-on-rails imagemagick carrierwave


    【解决方案1】:

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

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

    完整的文档可以在here找到

    【讨论】:

    • 嗨,谢谢您的回复。我用模型中定义的方法编辑了我的问题..正确吗?
    • 不,这是一次运行的脚本。就像每次重命名版本或添加新版本后,您只需在 rails console 中运行一次此脚本。
    • 你的模型是什么样的?
    • 现在我在 Rails 控制台中尝试过,突然它起作用了。不明白,为什么我的方法 after_save 没有重新创建这些版本?无论如何,你解决了我的问题!非常感谢!
    猜你喜欢
    • 1970-01-01
    • 2015-04-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-11-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多