Ruby on rails 添加单个延迟作业的最大尝试次数
我正在尝试为单个延迟作业添加max_尝试(如果失败)Ruby on rails 添加单个延迟作业的最大尝试次数,ruby-on-rails,ruby-on-rails-3,delayed-job,Ruby On Rails,Ruby On Rails 3,Delayed Job,我正在尝试为单个延迟作业添加max_尝试(如果失败) @user.delay(attempts: 2).send_an_email 这表明延迟作业中的“尝试”列丢失 但是可以通过在初始值设定项中添加延迟的_job_config文件来为整个应用程序实现这一点 # config/initializers/delayed_job_config.rb Delayed::Worker.max_attempts = 3 Delayed::Worker.destroy_failed_jobs =
@user.delay(attempts: 2).send_an_email
这表明延迟作业中的“尝试”列丢失
但是可以通过在初始值设定项中添加延迟的_job_config文件来为整个应用程序实现这一点
# config/initializers/delayed_job_config.rb
Delayed::Worker.max_attempts = 3
Delayed::Worker.destroy_failed_jobs = false
是否要为单个延迟作业添加它?您必须使用自定义作业。
必须创建自定义作业才能覆盖最大尝试次数
正如您在自述文件中看到的,.delay
方法采用的唯一参数是:
优先级
在
队列
max\u尝试次数
的值不会存储在delayed\u jobs
表中,只存储了尝试次数
,因此无法将其持久化
唯一的方法是创建一个自定义作业,当延迟的作业工作者处理该作业时,该作业将被重新实例化。然后,它从max\u尝试次数
方法中读取值,并使用该值确定表记录中的当前尝试次数
是否等于或超过max\u尝试次数
值
在您的情况下,最简单的方法是:
#在user.rb中
类用户<应用程序记录
SendAnEmailJob=Struct.new(:user)do
def执行
user.send__电子邮件
结束
def队列名称
“电子邮件”
结束
def max_尝试次数
2.
结束
结束
结束
然后使用排队
,在任何需要的地方运行它,如下所示:
Delayed::Job.enqueue(用户::SendAnEmailJob.new(用户))
应该是您正在寻找的可能重复的感谢,但我确定在哪里创建类,它在lib文件夹下吗