Создавайте эскизы imagemagick / carrierwave, когда они запрашиваются - PullRequest
3 голосов
/ 07 ноября 2011

Я использую гем несущей с Rmagick в приложении Rails.Я установил новую версию в своем файле загрузчика:

class ImageUploader < CarrierWave::Uploader::Base   
  include CarrierWave::RMagick
  storage :file
  def store_dir
    "uploads/#{model.class.to_s.underscore}/#{mounted_as}/#{model.id}"
  end
  version :preview do
     process :resize_to_fill => [580, 350]
  end
end

Конечно, я включил rmagick и carrierwave в свой gemfile.Теперь я пытаюсь загрузить версию моих изображений preview в моих представлениях:

@product.photos.first.image.preview

Это не дает никаких ошибок, но загружает испорченное изображение.Если я копирую URL-адрес изображения, я получаю ошибку маршрутизации («нет маршрута соответствует /path/to_my_imagesfolder/preview_image.png»).Если я удалю метод preview , изображение загрузится правильно.

В чем может быть проблема?Я подумал, может быть, это проблема с разрешениями, но я установил папку для загрузки с 777, и она все еще не работает.

Есть идеи?

РЕДАКТИРОВАТЬ: Я понял, если я загружаюизображения снова новые версии создаются.Можно ли заставить Rmagick создавать их при запросе (как это делает TimThumb в PHP)? Или, по крайней мере, есть какая-либо команда для пакетного создания всех версий?

Должен быть лучший способ, чем загрузка всех изображений...

Ответы [ 2 ]

10 голосов
/ 15 ноября 2011

Вы можете использовать .recreate_versions!

Например:

Product.all.each do |product|
  product.photos.each do |photo|
    photo.recreate_versions!
  end
end
0 голосов
/ 21 ноября 2011

Я бы просто использовал это: https://github.com/markevans/dragonfly

...