NoMethodError - undefined method `perform_later' for CarrierWave::Workers::ProcessAsset:Class
Closed this issue · 1 comments
coremuscle254 commented
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'
coremuscle254 commented
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