Resque_mailer未定义的方法'执行'为邮件程序类

时间:2012-08-03 01:04:00

标签: ruby-on-rails resque

我正在尝试使用Resque和Resque_mailer gem发送电子邮件,但发送电子邮件作业在排队后失败。我已经google了,stackoverflowed,并测试了许多不同的代码实现,到目前为止还没有任何工作。

我有以下实现:

版本:     铁轨(3.2.6)     resque(1.21.0)     resque_mailer(2.1.0)

控制器代码:

def send_newsletter 
  User.find_in_batches(:batch_size => 1000) do |users| 
     users.each { |user| AdminMailer.newsletter(user.email).deliver } 
  end 
end

邮件代码:

class AdminMailer < ActionMailer::Base 
     include Resque::Mailer 

  def newsletter(user_email) 
   mail(:to => user_email, :subject => "New Feature", :from => "noreply@example.com") 
  end

end

作业正在排队(我可以在邮件程序队列的Web界面中看到它们),但是失败了。这是失败的错误消息:

Exception: NoMethodError 
Error: undefined method `perform' for AdminMailer:Class

这很奇怪,因为在我的本地开发机器中,作业完成且没有错误。是否有一些我缺少的东西让它在发动机厂的生产中工作?

我已经运行了其他不包括发送电子邮件或使用resque_email的resque作业。

我非常感谢任何帮助,提前谢谢!

1 个答案:

答案 0 :(得分:0)

修正了问题:

问题是在生产中,当我将我的应用程序部署到EngineYard时,Resque进程没有正确重启。

EngineYard具有部署挂钩,您可以在部署过程中的某些位置运行代码。

after_symlink部署挂钩中,要运行的正确代码是:sudo "monit restart all -g app_name_resque"。其中app_name是您应用的名称。此外,在before_restart部署挂钩中,您需要运行:run "sudo monit start all -g fractalresque_resque"

这解决了我的问题!