Ошибка Carrierwave: версия не существует! в рельсах - PullRequest
0 голосов
/ 19 октября 2019

Я использую Carrierwave (2.0.2, 0.11.2) в Rails 5.2.3. и я застрял с версиями загруженных изображений. Imagemagick - это последняя версия, установлены гемы 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

Загруженоизображения обрабатываются, масштабируются и сохраняются в: оригинальном размере,: большом и: версии для большого пальца в правильных папках ... все хорошо. Но если я пытаюсь создать другую версию или переименовать существующую, например «version: long», она не создает ее, и в моих представлениях исключение определяется как: «Long version не существует!»Я пробовал несколько разных названий версий, количество версий, имя как символ, в кавычках, также читал исходный код Carrierwave / versions.rb, читал документацию, но все еще не мог найти причину такого поведения. Только эти две версииработает хорошо, а не какой-либо другой. Не могли бы вы кто-нибудь помочь мне с этим? Спасибо!

1 Ответ

0 голосов
/ 19 октября 2019

После переименования версии или добавления новой версии вам необходимо воссоздать эти версии, вызвав что-то вроде этого:

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

Полная документация может быть найдена здесь

...