CarrierWave не изменяет размер / Minimagick

Я не могу заставить этот загрузчик CarrierWave обрабатывать изображение и изменять его размер так, как мне хотелось бы.

Изображение изначально создается с этим.

class Screenshot
    include Sidekiq::Worker

    def perform(link_id)
        link = Link.find(link_id)
        file = Tempfile.new(["template_#{link.id.to_s}", '.jpg'], 'tmp', :encoding => 'ascii-8bit')
        file.write(IMGKit.new(link.given_url, #quality: 50, width: 300).to_img(:jpg))
                                     :quality => 50, 
                                    :width => 300,
                                    :height => 300,
                                    "crop-w" => 300,
                                    "crop-h" => 300,
                                    "disable-smart-width" => true,
                                    "zoom" => 0.35).to_img(:jpg))
        file.flush
        link.snapshot = file
        link.save
        file.unlink
    end

end

Я не мог заставить это работать, поэтому я подумал, что просто изменю размер в загрузчике. Затем я изменил загрузчик, чтобы сделать это следующим образом:

class SnapshotUploader < CarrierWave::Uploader::Base
    include CarrierWave::MiniMagick

  storage :file
  storage :fog
  process :convert_it

  def convert_it
    manipulate! do |img|
        img.resize '300x300'
        img
    end
  end

  def convert_it2
    resize_to_limit [300,300]
  end

  def convert_it3
    resize_to_fit [300,-1]
  end

  def store_dir
    "uploads/#{model.class.to_s.underscore}/#{mounted_as}/#{model.id}"
  end

  def cache_dir
    "#{Rails.root}/tmp/uploads"
  end
end

И это тоже не работает. Я пробовал каждый из методов преобразования, а также только прямой

process :resize_to_limit [300,300]

Образ создан. Кажется, теперь всегда ширина 600 на любой высоте.

Изображение загружается в AWS S3.

У меня установлен Imagemagick с параметром --disable-openmp из доморощенного. Я могу запустить mogrify и конвертировать из командной строки.

Я могу без проблем изменить размер изображения и сохранить его в консоли rails с помощью MiniMagick.

Я убедился, что инициализатор CarrierWave имеет config.enable_processing = true.

Я не вижу никаких сообщений об ошибках в консоли или в окне терминала sidekiq.

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

РЕДАКТИРОВАТЬ: ширина 600 исходила из IMGKit, что означает, что у меня до сих пор никогда не было несущей, которая фактически обрабатывала изображение.


person Chris Valentine    schedule 14.07.2014    source источник
comment
Вы пытаетесь использовать версию. версия :medium сделать процесс :resize_to_limit => [300, 300] конец   -  person Rafal    schedule 14.07.2014
comment
Я могу попробовать, обработка должна работать только с версиями? Я думал, что видел примеры, когда они могут просто изменить оригинал, так как мне нужно только получить уменьшенную версию, ничего больше.   -  person Chris Valentine    schedule 14.07.2014
comment
На оригинале тоже должно работать. Создает ли S3 новый образ каждый раз или заменяет текущий образ?   -  person Rafal    schedule 14.07.2014
comment
Каждый раз создавайте новое изображение в папке с идентификатором сообщения. Это просто неправильные размеры   -  person Chris Valentine    schedule 14.07.2014
comment
@ChrisValentine вы можете вызывать процесс вне версий. Однако он заменит исходное изображение обработанной версией.   -  person Monideep    schedule 14.07.2014
comment
@deep хорошо, это то, чего я хочу, теперь, чтобы заставить его действительно это сделать   -  person Chris Valentine    schedule 14.07.2014


Ответы (1)


Что ж, это оказалось вызвано тем, что Sidekiq не перезапускался каждый раз, когда я менял код.

Я не знал, что вам нужно это сделать, однако, насколько я знаю, загрузчик не использует sidekiq для загрузки, поэтому я не понимаю, почему это был побочный эффект.

В любом случае, останавливая sidekiq каждый раз, когда я вносил изменения в код, это заставляло это работать.

Я также нашел драгоценный камень Foreman, который помогает запускать / останавливать все службы вместе.

Если кто-нибудь может объяснить мне, почему Sidekiq вмешался в это, дайте мне знать. Sidekiq отвечал за создание образа, и образ создавался. Изменение размера просто не происходило во время загрузки.

person Chris Valentine    schedule 14.07.2014