带有 Resque 的 ActiveJob:使用意外参数排队作业
ActiveJob with Resque: enqueuing jobs with uninteded arguments
正在尝试实现某种取消作业功能。为了 destroy a job with Resque,需要传递给它的特定参数。不过,我似乎错误地传递了意外信息。
我希望参数值位于外括号内。我正在这样创建工作:
PhysicalServerProvisionJob.perform_later('123')
我希望能够:
Resque::Job.destroy(:default, PhysicalServerProvisionJob, '123')
然而,由于传入了额外的信息,这是不可能的。如果这是不可避免的,是否有其他方法可以销毁特定的排队作业?
因为 Resque::Job.destroy
正在寻找所有参数的精确匹配,所以它对查找 ActiveJob class.
没有帮助
这是我为解决这个问题而编写的脚本:
# Pop jobs off the queue until there are no more
while job = Resque.reserve('default')
# Check this job for the ActiveJob class name we're looking for;
# if it does not match, push it back onto a different queue
unless job.args.to_s.include?('PhysicalServerProvisionJob')
Resque.push('another_queue', class: job.payload_class.to_s, args: job.args)
end
end
在的帮助下,我这样解决了问题:
Resque.size('default').times do
job = Resque.reserve('default')
next if job.nil? || job.args.first['arguments'].first == id
Resque.push('default', class: job.payload_class.to_s, args: job.args)
end
正在尝试实现某种取消作业功能。为了 destroy a job with Resque,需要传递给它的特定参数。不过,我似乎错误地传递了意外信息。
我希望参数值位于外括号内。我正在这样创建工作:
PhysicalServerProvisionJob.perform_later('123')
我希望能够:
Resque::Job.destroy(:default, PhysicalServerProvisionJob, '123')
然而,由于传入了额外的信息,这是不可能的。如果这是不可避免的,是否有其他方法可以销毁特定的排队作业?
因为 Resque::Job.destroy
正在寻找所有参数的精确匹配,所以它对查找 ActiveJob class.
这是我为解决这个问题而编写的脚本:
# Pop jobs off the queue until there are no more
while job = Resque.reserve('default')
# Check this job for the ActiveJob class name we're looking for;
# if it does not match, push it back onto a different queue
unless job.args.to_s.include?('PhysicalServerProvisionJob')
Resque.push('another_queue', class: job.payload_class.to_s, args: job.args)
end
end
在
Resque.size('default').times do
job = Resque.reserve('default')
next if job.nil? || job.args.first['arguments'].first == id
Resque.push('default', class: job.payload_class.to_s, args: job.args)
end