lardawge/carrierwave_backgrounder

NoMethodError - undefined method `perform_later' for CarrierWave::Workers::ProcessAsset:Class

Closed this issue · 1 comments

I am getting this error when I try to process images using the carrrierwave_backgrounder gem and active_job

I am not sure what to do since I followed the installation steps as written on the README.

Rails Version. 6.1.3.1 Ruby Version: 2.7.0

product.rb

  mount_uploader :image, ImageUploader
  process_in_background :image

image_uploader.rb

include CarrierWave::RMagick
include CarrierWave::MiniMagick
include CarrierWave::ImageOptimizer
include ::CarrierWave::Backgrounder::Delay

storage :fog

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


def fix_exif_rotation 
  manipulate! do |img|
    img.tap(&:auto_orient)
  end
end

version :thumb do
  process :fix_exif_rotation
  process resize_to_fit: [50, 50]
  process optimize: [ {quality: 100}]
end

version :thumb_webp do
  process :fix_exif_rotation
  process resize_to_fit: [50, 50]
  process convert: 'webp'
  process optimize: [ {quality: 100}]
end

version :thumb_jpg2 do
  process :fix_exif_rotation
  process resize_to_fit: [50, 50]
  process convert: 'jpg2'
  process optimize: [ {quality: 100}]
end

config/initializers/carrierwave_backgrounder.rb

 CarrierWave::Backgrounder.configure do |c|
  c.backend :active_job, queue: :carrierwave
end

config/initializers/carrierwave.rb

CarrierWave.configure do |config|
  config.fog_credentials = {
    provider:              Figaro.env.aws_provider,                       # required
    aws_access_key_id:     Figaro.env.aws_access_key_id,                  # required unless using use_iam_profile
    aws_secret_access_key: Figaro.env.aws_secret_access_key,    					# required unless using use_iam_profile
    region:                Figaro.env.aws_region                  				# optional, defaults to 'us-east-1'
  }

  config.fog_directory  = Figaro.env.aws_fog_directory                          # required
  config.fog_public     = false                                                 # optional, defaults to true
  config.fog_attributes = { cache_control: "public, max-age=#{365.days.to_i}" } # optional, defaults to {}
end

gemfile.rb - Order of carrierwave gems on Gemfile

gem 'carrierwave'                              
gem "fog-aws"                                  
gem 'mini_magick'                              
gem 'sidekiq'
gem 'carrierwave-imageoptimizer'          
gem 'rmagick'                                
gem 'carrierwave_backgrounder', github: 'lardawge/carrierwave_backgrounder'

I resolved this by just adding an active job with nothing inside

class ProcessImagesJob < ApplicationJob
  include ::CarrierWave::Workers::ProcessAssetMixin

  queue_as :carrierwave_upload_processing

  def perform(*args)
    # Do something later
  end
end

I then added

process_in_background :image, ProcessImagesJob