我成功整合了delayed_job邮件(app> mailers> notification_mailer.rb),它有一个方法:
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
我在我的控制器中调用它,例如:
NotificationMailer.delay.notification_message(@activity, user)
但是,我在使用delayed_job进行非邮件作业时遇到问题。我在app中创建了一个文件夹&gt;我安排课程的工作,例如:
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
但是当我尝试使用
在我的控制器中调用此方法时CarrierwaveImageUploader.delay.execute(@image.id, s3_image_url)
我收到错误
NoMethodError (undefined method `execute' for CarrierwaveImageUploader
我正在使用delayed_job 4.1.2并重启了delayed_job。
答案 0 :(得分:1)
def execute
是一个实例方法,而不是类方法。
CarrierwaveImageUploader.delay.execute(@image.id, s3_image_url)
因为课程CarrierwaveImageUploader
没有execute
方法而无法使用。
uploader = CarrierwaveImageUploader.new
uploader.delay.execute(@image.id, s3_image_url)
应该工作,因为它创建一个实例并调用其execute
方法。