I am trying to process downloaded images ( CarrierWave ) in the background (via Sidekiq ).
Here is my configuration ( carrierwave_delay gem ):
class IconUploader < CarrierWave::Uploader::Base def is_processing_delayed? img = nil !! @is_processing_delayed end def is_processing_immediate? img = nil ! is_processing_delayed? end def is_processing_delayed= value @is_processing_delayed = value end include CarrierWave::MiniMagick storage :fog def store_dir "uploads/#{model.class.to_s.underscore}/#{mounted_as}/#{model.id}" end process resize_to_fill: [500, 500] version :large, if: :is_processing_delayed? do process resize_to_fill: [192, 192] end version :medium, from: :large, if: :is_processing_delayed? do process resize_to_fill: [144, 144] end def extension_whitelist %w(png) end end class App < ApplicationRecord mount_uploader :icon, IconUploader carrierwave_delay [:icon] cattr_accessor :carrierwave_delay_columns def self.carrierwave_delay columns after_save :carrierwave_delay_process self.carrierwave_delay_columns = columns end def self.carrierwave_delay_queue :default end def self.carrierwave_delay_priority 20 end def recreate_delayed_versions! self.class.carrierwave_delay_columns.each do |column| unless self.send(column).file.nil? self.send(column).is_processing_delayed = true self.send(column).recreate_versions! end end end private def carrierwave_delay_process self.delay(queue: self.class.carrierwave_delay_queue, priority: self.class.carrierwave_delay_priority, retry: false).recreate_delayed_versions! end end
All files are processed successfully and saved to S3, as specified in config/initializers/carrierwave.rb . But, unfortunately, the icon.send(version).url remains returning nil (thus, it does not update after a successful file upload).
Normal boot works well.
source share