Я пытаюсь использовать sidekiq worker, который более или менее сохраняет файл изображения в базу данных (с использованием carrierwave). Осталось сохранить несколько файлов, которые представляют собой ключевые кадры, извлеченные из видеофайла. Вот о чем этот рабочий.
Мой загрузчик изображений имеет несколько определенных версий и выглядит следующим образом:
class KeyframeUploader < CarrierWave::Uploader::Base
# ...
# Keyframe thumbnail sizes
version :small do
process resize_to_fill: [180, 180], if: :square?
process resize_to_fill: [320, 180], if: :not_square?
end
version :medium do
process resize_to_fill: [460, 460], if: :square?
process resize_to_fill: [640, 460], if: :not_square?
end
version :large do
process resize_to_fill: [720, 720], if: :square?
process resize_to_fill: [1280, 720], if: :not_square?
end
private
# Checks if image is a square
def square? file
img = Magick::Image.read(file.path)
img[0].columns == img[0].rows
end
# Oposite to #square?
def not_square? file
!square? file
end
end
Дело в том, что когда я пытаюсь запустить свой Sidekiq Worker, он выдает Celluloid::FiberStackError: stack level too deep
, и единственный способ исправить это - удалить определения моей версии. Это работает, только если загрузчику не назначена никакая версия.
Я попытался перенести процесс сохранения на другой воркер или использовать Carrierwave :: Backgrounder, но всегда получаю тот же результат.
Ты хоть представляешь, что я могу с этим поделать?
Изменить: Моя трассировка:
SystemStackError: слишком глубокий уровень стека от /usr/local/rvm/rubies/ruby-2.1.1/lib/ruby/2.1.0/irb/workspace.rb:86
Stack Level Too Deep
означает, что у вас где-то бесконечный цикл - person Richard Peck   schedule 06.03.2014puts '...'
вsquare?
? - person Uri Agassi   schedule 12.03.2014