Rails 3推迟了工作 - 升级到Rails 3打破了delayed_job任务

时间:2011-11-28 22:26:55

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

我正在尝试将我们的应用程序部分升级到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中完美运行,运行delayed_job 2.0.5。在Rails 3上,我们运行2.1.4。

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

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

编辑:我还应该注意,我已经在本地计算机上启动了delayed_job进程,其中包含“rails delayed_job start”和“script / delayed_job start”。既没有解决问题。

1 个答案:

答案 0 :(得分:0)

原来是与delayed_job无关的东西。