Rails 3 延迟作业 - 升级到 Rails 3 会中断延迟作业任务

Posted

技术标签:

【中文标题】Rails 3 延迟作业 - 升级到 Rails 3 会中断延迟作业任务【英文标题】:Rails 3 delayed job - upgrading to Rails 3 breaks delayed_job tasks 【发布时间】:2011-11-28 22:26:54 【问题描述】:

我正在尝试将我们的应用程序部分升级到 Rails 3,特别是我们的单元测试。我一直遇到延迟作业和邮件程序的问题,特别是在运行测试时邮件程序没有被“发送”。

为了测试发送的电子邮件,我们通过测试助手中的“assert_email”方法运行它们,它或多或少看起来像这样:

def process_delayed_jobs
  while Delayed::Worker.new(:quiet => true).send(:reserve_and_run_one_job) do
    # nothing
  end
end
alias_method :deliver_delayed_emails, :process_delayed_jobs

def assert_emails(number, skip_assertion = false)
  deliver_delayed_emails # start with a clean slate
  if block_given?
    original_count = ActionMailer::Base.deliveries.size
    yield
    deliver_delayed_emails
    new_count = ActionMailer::Base.deliveries.size
    assert_equal original_count + number, new_count, "#number emails expected, but #new_count - original_count were sent" unless skip_assertion
  else
    assert_equal number, ActionMailer::Base.deliveries.size unless skip_assertion
  end
end

我们这样测试:

assert_emails 2 do
  Model.action_that_sends_mailer
end

这段代码在 Rails 2 中完美运行,运行 delay_job 2.0.5。在 Rails 3 上,我们运行的是 2.1.4。

基本上,每次我们测试它都会失败,因为发送了“0”封电子邮件。邮件程序本身已正确升级,并且我已从方法调用中删除了错误的“.deliver”以将其关闭。 delay_jobs 日志为空,因此看起来没有任何处理。

我觉得我在这里遗漏了某种关键(但很简单)的语法问题。任何帮助表示赞赏。

编辑:我还应该注意,我已经在本地机器上启动了延迟作业进程,同时使用了“rails delay_job start”和“script/delayed_job start”。都不能解决问题。

【问题讨论】:

请告诉我们method_call是什么。 【参考方案1】:

原来是与delayed_job无关的东西。

【讨论】:

以上是关于Rails 3 延迟作业 - 升级到 Rails 3 会中断延迟作业任务的主要内容,如果未能解决你的问题,请参考以下文章

如何使 ExceptionNotifier 在 Rails 3 中与延迟作业一起使用?

在其他方法完成后运行方法延迟作业 rails 3

Rails/Rspec:测试延迟作业邮件

Rails 4.2 从活动作业中获取延迟的作业 ID

使用作为守护任务运行的延迟作业部署 Rails 应用程序

销毁 Rails 中所有延迟的工作