У меня возникли проблемы с реализацией простого загрузчика изображений с камнями Carrierwave/Minimagick в RoR.Carrierwave/Minimagick не обрабатывает изображения после загрузки
Я пытаюсь преобразовать файл в оттенки серого при загрузке, но я получаю сообщение об ошибке. Вот код:
image_uploader.rb:
class ImageUploader < CarrierWave::Uploader::Base
include CarrierWave::MiniMagick
# Include the Sprockets helpers for Rails 3.1+ asset pipeline compatibility:
include Sprockets::Helpers::RailsHelper
include Sprockets::Helpers::IsolatedHelper
storage :file
def store_dir
"uploads/#{model.class.to_s.underscore}/#{mounted_as}/#{model.id}"
end
# Process files as they are uploaded:
process :convert_to_grayscale
def convert_to_grayscale
manipulate! do |img|
img.quantize(256, Magick::GRAYColorspace)
img = yield(img) if block_given?
img
end
end
При попытке загрузить файл, я получаю следующее сообщение об ошибке:
uninitialized constant ImageUploader::Magick
app/uploaders/image_uploader.rb:36:in `block in convert_to_grayscale'
app/uploaders/image_uploader.rb:35:in `convert_to_grayscale'
Я считаю, что это из-за Magick :: GREYColorspace enum constant. Любые идеи, почему это не работает?
Вот что документация carrierwave говорит о манипуляции():! ** манипулировать() ** Манипулирование изображение с RMagick. Этот метод загрузит изображение, а затем передаст каждый из его кадров в поставляемый блок. Затем он сохранит изображение на диск. Gotcha Этот метод предполагает, что объект отвечает на current_path. Любой класс, в который этот модуль смешивается, должен иметь метод current_path. CarrierWave :: Uploader, так что вам не придется беспокоиться об этом в большинстве случаев. Урожайность MiniMagick :: Изображение манипуляции для выполнения Поднимает CarrierWave :: ProcessingError если манипуляция не удалось. – diego