gpt4 book ai didi

ruby-on-rails - 为什么 delay_jobs 在出错时会循环?

转载 作者:行者123 更新时间:2023-12-04 16:49:00 27 4
gpt4 key购买 nike

我曾有过几次 delay_jobs 将负责发送 4000 封电子邮件,如果这些电子邮件中出现错误(例如,如果没有调用),那么它将重新启动整个过程并尝试再发送 4000电子邮件。这将无限期地持续下去,直到我手动杀死 -9 整个过程。

在过去的几年里,我在不同的应用程序中发生了很多次,我很好奇是否发生在其他人身上。以及他们为克服它所做的一切。

最佳答案

延迟作业通常只是在后台进程中由工作人员执行的方法,而不是在应用程序的主线程(Rails 应用程序的请求生命周期)期间执行。
如果您阅读了 documentation for delayed_job在“血腥细节”下,它指出:

On failure, the job is scheduled again in 5 seconds + N ** 4, where N is the number of retries.

The default Worker.max_attempts is 25. After this, the job either deleted (default), or left in the database with “failed_at” set.With the default of 25 attempts, the last retry will be 20 days later, with the last interval being almost 100 hours.


听起来您所描述的是 delay_jobs 旨在发挥作用的方式 - 如果发送 4,000 封电子邮件的作业在发送 3,000 封电子邮件后失败,则它会重新开始。您可能需要跟踪已发送和未发送的内容,以便您的工作可以遍历“未发送”的电子邮件(或任何适合您后台进程的信息)。这样,当您发送 3,000 封电子邮件时,它们会被标记为“已发送”,如果您的作业失败,它将通过加载剩余的 1,000 封“未发送”电子邮件并尝试发送它们来重新开始。
如果您真的不希望作业在失败时重试,您可以将以下代码添加到您的项目中:
# config/initializers/delayed_job_config.rb
Delayed::Worker.max_attempts = 1

关于ruby-on-rails - 为什么 delay_jobs 在出错时会循环?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6308408/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com