Delayed::Job 钩子和deliver_later

Delayed::Job hooks and deliver_later

提问人:davew 提问时间:11/11/2023 更新时间:11/11/2023 访问量:20

问:

在 README 中,在 Rails Mailers (https://github.com/collectiveidea/delayed_job/#rails-mailers) 下,它指出

您可能还希望考虑将 Active Job 与 Action Mailer 一起使用,它提供了方便.deliver_later语法,可在后台转发到 Delayed Job。

这对我来说似乎具有误导性,因为似乎许多延迟作业功能都停止工作。“转发到引擎盖下的延迟工作”这句话,听起来像是 DelayedJob 仍在控制之中。谁能证实或澄清我的误解?

我已经使用 DelayedJob 很长时间了,并在某个时候开始根据自述文件中的注释使用。deliver_later

我刚刚开始使用自定义作业,并且正在清理我的 Rollbar 集成。在 Hooks (https://github.com/collectiveidea/delayed_job#hooks) 一节中,它指出:

注意:如果您使用的是 ActiveJob,则这些挂钩不适用于您的作业。您将需要使用 ActiveJob 的回调。您可以在此处找到详细信息 https://guides.rubyonrails.org/active_job_basics.html#callbacks

从那以后,我通过在邮件程序中抛出异常来对此进行实验,并注意到发送的邮件未作为失败作业报告给 DelayedJob 或按照 DelayedJob 中的配置重试。deliver_later

我还注意到 Rollbar 集成与 DelayedJob :failure 钩子 (https://github.com/rollbar/rollbar-gem/blob/master/lib/rollbar/plugins/delayed_job/plugin.rb) 相关联。

通过声明 Active Mailer“提供了方便的.deliver_later语法,可以在后台转发到延迟作业”,并不清楚我是否错过了 DelayedJob 重试和失败逻辑......以及 Rollbar 的 DelayedJob 集成。

我认为应该添加一个警告来说明警告,因为许多新用户不会在一开始就阅读/吸收有关自定义作业和钩子的所有细节。

以下情况是否属实?“当使用 instead 而不是 时,不会调用 DelayedJob 钩子,因此 DelayedJob 的重试和失败处理将不会被接受。在这种情况下,在使用 时,您应该依赖 ActiveJob 异常处理。deliver_laterdelaydeliver_later

环境
铁轨 5.2.8.1
延迟作业 4.1.11
防滚架 3.4.0
Ruby-on-Rails Ruby-on-Rails-5 延迟作业 导轨-ActiveJob Roll Bar

评论

0赞 engineersmnky 11/11/2023
我对这个问题有点困惑,因为它似乎可以回答自己。您问:“当使用 deliver_later 而不是 delay 时,不会调用 DelayedJob 钩子,因此不会遵循 DelayedJob 的重试和失败处理。在这种情况下,在使用 deliver_later 时,应依赖 ActiveJob 异常处理。但也表示文档说:“如果您使用的是 ActiveJob,这些钩子不适用于您的工作。您将需要使用 ActiveJob 的回调。
0赞 davew 11/11/2023
@engineersmnky在我看来,文档自相矛盾。我会创建一个 GitHub 问题,可能还会创建 PR,但似乎问题、PR 和 Google 组目前尚未得到管理。因此,我来到这里,希望能证实我的怀疑,这样我就可以放心地继续前进。然后我很想努力清理文档。正如它所写的那样,这两个语句位于不同的部分,初次使用的用户并不清楚。

答: 暂无答案