ruby on rails - Delayed Job Gem: Undefined Method 'perform' for Class -
i successful integration delayed_job mailer (app > mailers > notification_mailer.rb), has single method:
class notificationmailer < actionmailer::base default from: env["gmail_username"] def notification_message(activity, user) @user = user @activity = activity if @activity.is_comment? subject = @activity.trackable.user.username + ' commented on ' + @activity.trackable.commentable.project.title @type = "comment" end mail(to: @user.email, subject: subject) end end
i call in controller, example:
notificationmailer.delay.notification_message(@activity, user)
however, i'm having issues using delayed_job non mailer jobs. created folder in app > jobs i've placed classes, such as:
class carrierwaveimageuploader def execute(image_id, s3_url) if image.exists?(image_id) @image = image.find(image_id) @image.remote_image_path_url = s3_url @image.update_column(:rotation, nil) @image.save end end handle_asynchronously :execute end
but when try call method in controller with
carrierwaveimageuploader.delay.execute(@image.id, s3_image_url)
i error
nomethoderror (undefined method `execute' carrierwaveimageuploader
i using delayed_job 4.1.2 , have restarted delayed_job.
def execute
instance method, not class method.
carrierwaveimageuploader.delay.execute(@image.id, s3_image_url)
doesn't work because class carrierwaveimageuploader
doesn't have execute
method.
uploader = carrierwaveimageuploader.new uploader.delay.execute(@image.id, s3_image_url)
should work, creates instance , calls execute
method.
Comments
Post a Comment