2012-08-03 47 views
1

我试图发送电子邮件使用Resque和Resque_mailer宝石,但发送电子邮件作业排队后失败。我使用了Google,stackoverflow,并且测试了许多不同的代码实现,到目前为止还没有任何工作。Resque_mailer undefined方法'执行'为邮件类

我有以下实现:

版本: 轨(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 => "[email protected]") 
    end 

end 

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

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

这很奇怪,因为在我的本地开发机器中,作业正在完成而没有错误。有没有什么我想让它在引擎工厂生产的工作?

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

我会很感激任何形式的帮助,提前致谢!

回答

0

修正问题:

的问题是,在生产中,Resque过程并没有当我部署我的应用程序EngineYard的重新启动正常。

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

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

这解决了我的问题!