Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/ruby-on-rails/56.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ruby on rails 添加单个延迟作业的最大尝试次数_Ruby On Rails_Ruby On Rails 3_Delayed Job - Fatal编程技术网

Ruby on rails 添加单个延迟作业的最大尝试次数

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 =

我正在尝试为单个延迟作业添加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 = 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文件夹下吗