Delayed_job:NoMethodError:未定义的方法`my_method_without_delay'

时间:2011-08-10 12:08:58

标签: ruby-on-rails actionmailer delayed-job

使用rails 2.3.11和delayed_job 2.0.4作为gem我在使用handle_asynchronously时遇到错误:

在我的ActionMailer模型中,我明确了my_method并在声明后添加了'handle_asynchronously:my_method':

class MailSender < ActionMailer::Base
    def my_method
        ...
    end
    handle_asynchronously :my_method
end

调用MailSender.deliver_my_method时,任务已正确添加到队列中。但是当尝试处理它时,它会失败并显示错误消息:

undefined method `rappel_email_without_delay' for #<YAML::Object:0x1034b85f8>

延迟MailSender.delay.deliver_my_method正在运行,任务正确处理 - 但我宁愿使用handle_asynchronously取消我的模型,以确保邮件始终在后台发送......

4 个答案:

答案 0 :(得分:6)

您需要使用

重新启动工作进程
  

佣金工作:工作

答案 1 :(得分:5)

3.2.3也有这个问题。

通过在每次代码更改后重新启动DJ进程来修复它。

答案 2 :(得分:0)

您仍然可以使用handle_asynchronously宏声明,但使用ActionMailer调用延迟作业的语法略有不同。

# without delayed_job
MailSender.my_method.deliver

# with delayed_job
MailSerder.delay.my_method

这是从较旧版本的自述文件中提取的,但它不在当前的版本中,所以可能更新版本的延迟作业会解决这个问题。

答案 3 :(得分:0)

我遇到了同样的问题,最终遇到了以下post。基本上,delayed_job工作者似乎很难解组非ActiveRecord对象。对我有用的快速修复方法是在初始化程序或environment.rb中要求您的类,例如

# config/environment.rb
...
require 'mail_sender'