【问题标题】:Resque_mailer undefined method 'perform' for mailer class邮件程序类的 Resque_mailer 未定义方法“执行”
【发布时间】:2012-08-01 01:02:07
【问题描述】:

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

我有以下实现:

版本: 导轨 (3.2.6) 响应式(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

这很奇怪,因为在我的本地开发机器中,作业正在顺利完成。我有什么东西不能让它在engineyard的生产中工作吗?

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

非常感谢任何形式的帮助,在此先感谢!

【问题讨论】:

    标签: ruby-on-rails resque


    【解决方案1】:

    修复了问题:

    问题是在生产中,当我将应用程序部署到 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"

    这为我解决了问题!

    【讨论】:

      猜你喜欢
      • 2015-02-14
      • 2012-01-21
      • 2015-06-23
      • 2012-07-03
      • 2018-12-11
      • 2014-09-11
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多