Я пытаюсь использовать sidekiq worker, который более или менее сохраняет файл изображения в базу данных (используя несущую). Есть несколько файлов для сохранения, которые являются ключевыми кадрами, извлеченными из видеофайла. Это то, о чем говорит этот рабочий.
У моего загрузчика изображений есть несколько версий, которые определены и выглядят следующим образом:
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, но я всегда получаю тот же результат.
Есть ли у вас какие-нибудь идеи, что я могу сделать с этим?
Изменить: моя stracktrace:
SystemStackError: уровень стека слишком глубок /usr/local/rvm/rubies/ruby -2.1.1/lib/ruby/2.1.0/irb/workspace.rb:86