延迟作业宝石:未定义的方法'执行'为类

时间:2016-09-12 21:34:52

标签: ruby-on-rails delayed-job

我成功整合了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。

1 个答案:

答案 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方法。