gpt4 book ai didi

ruby-on-rails - 为单个延迟作业添加最大尝试

转载 作者:行者123 更新时间:2023-12-05 07:24:08 25 4
gpt4 key购买 nike

我正在尝试为单个延迟作业添加 max_attempt(如果失败)

@user.delay(attempts: 2).send_an_email 

这表明延迟作业中的尝试列丢失了

但是可以通过在初始化程序中添加 delayed_job_config 文件来为整个应用程序做到这一点

# config/initializers/delayed_job_config.rb
Delayed::Worker.max_attempts = 3
Delayed::Worker.destroy_failed_jobs = false

有没有为单个延迟作业添加它?

最佳答案

您必须使用自定义作业。

您必须创建自定义作业才能覆盖 max_attempts

如您在自述文件中所见 here.delay 方法采用的唯一参数是:

  • 优先级
  • run_at
  • 队列

如果您考虑一下,max_attempts 的值并未存储在 delayed_jobs 表中,仅存储了 attempts,因此没有办法让它持久化。

唯一的方法是创建一个自定义作业,当延迟作业工作人员处理该作业时,该作业会重新实例化。然后它从 max_attempts 方法中读取值并使用它来确定表记录中的当前 attempts 是否等于或超过 max_attempts 值。

在您的情况下,最简单的方法是这样的:

# Inside your user.rb
class User < ApplicationRecord

SendAnEmailJob = Struct.new( :user ) do

def perform
user.send_an_email
end

def queue_name
"email"
end

def max_attempts
2
end

end

end

然后使用enqueue在任何你需要的地方运行它,就像这样:

Delayed::Job.enqueue( User::SendAnEmailJob.new( user ) )

关于ruby-on-rails - 为单个延迟作业添加最大尝试,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55625214/

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