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
方法中输入的任何 puts
和 raise
都没有显示在 resque/rails 控制台日志中。
我已经按照 resque github 页面上的自述文件在新的 rails 应用程序上完成了基本的 resque 设置。我没有做任何习惯。显然,我在更改 test_job.rb
文件后重新启动了我的控制台和工作程序,所以这不是加载问题(也许?)。我还尝试将 self.perform
更改为 perform
。
我不知道为什么,但这是解决方案。而不是 运行ning:
Resque.enqueue(TestJob)
一个应该 运行:
TestJob.perform_later
事实是,第一种方式来自 Resque README,第二种方式来自 Rails 文档。我想我一直专注于第一种方式,但看起来遵循 rails 约定总是最好的。
我在使用 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
方法中输入的任何 puts
和 raise
都没有显示在 resque/rails 控制台日志中。
我已经按照 resque github 页面上的自述文件在新的 rails 应用程序上完成了基本的 resque 设置。我没有做任何习惯。显然,我在更改 test_job.rb
文件后重新启动了我的控制台和工作程序,所以这不是加载问题(也许?)。我还尝试将 self.perform
更改为 perform
。
我不知道为什么,但这是解决方案。而不是 运行ning:
Resque.enqueue(TestJob)
一个应该 运行:
TestJob.perform_later
事实是,第一种方式来自 Resque README,第二种方式来自 Rails 文档。我想我一直专注于第一种方式,但看起来遵循 rails 约定总是最好的。