Resque 没有让一个明显有问题的工作失败

Resque not failing an obviously buggy job

我在使用 Resque 和 Rails 6 (ruby 2.7.2) 时遇到以下问题。我是这个 gem 的新手,想做一些简单的测试看看事情是如何处理的,所以我创建了一个简单的失败作业:

class TestJob < ApplicationJob
  @queue = :default

  def self.perform(*args)
    0/0
  end
end

显然,当我转到控制台并 运行 它时,我得到了错误:

irb(main):001:0> TestJob.perform
Traceback (most recent call last):
        3: from (irb):1
        2: from app/jobs/test_job.rb:5:in `perform'
        1: from app/jobs/test_job.rb:5:in `/'
ZeroDivisionError (divided by 0)

但是当我 运行 我的工人使用命令时:

QUEUE=* VVERBOSE=true rake resque:work

然后在 rails 控制台中排队我的工作,我得到的输出是:

irb(main):002:0> Resque.enqueue(TestJob)
=> true

并且在resque日志中:

** [21:32:57 2020-12-09] 15198: resque-2.0.0: Waiting for default
** [21:33:02 2020-12-09] 15198: Checking default
** [21:33:02 2020-12-09] 15198: Found job on default
** [21:33:02 2020-12-09] 15198: resque-2.0.0: Processing default since 1607545982 [TestJob]
** [21:33:02 2020-12-09] 15198: got: (Job{default} | TestJob | [])
** [21:33:02 2020-12-09] 15198: resque-2.0.0: Forked 15765 at 1607545982
** [21:33:02 2020-12-09] 15765: done: (Job{default} | TestJob | [])

此外,在 resque web UI 中,它将此过程视为成功。失败的作业数保持为 0。此外,我在 perform 方法中输入的任何 putsraise 都没有显示在 resque/rails 控制台日志中。

我已经按照 resque github 页面上的自述文件在新的 rails 应用程序上完成了基本的 resque 设置。我没有做任何习惯。显然,我在更改 test_job.rb 文件后重新启动了我的控制台和工作程序,所以这不是加载问题(也许?)。我还尝试将 self.perform 更改为 perform

我不知道为什么,但这是解决方案。而不是 运行ning:

Resque.enqueue(TestJob)

一个应该 运行:

TestJob.perform_later

事实是,第一种方式来自 Resque README,第二种方式来自 Rails 文档。我想我一直专注于第一种方式,但看起来遵循 rails 约定总是最好的。