带Resque的ActiveJob:使用无限制的参数排队作业

时间:2016-02-23 21:57:29

标签: ruby ruby-on-rails-4 resque rails-activejob

尝试实现某种取消作业功能。为了destroy a job with Resque,需要传递给它的特定参数。看来我错误地传递了非预期的信息。

enter image description here

我希望只有参数值在外括号内。我是这样创造这样的工作的:

PhysicalServerProvisionJob.perform_later('123')                        

我希望能够:

Resque::Job.destroy(:default, PhysicalServerProvisionJob, '123')

然而,由于传入了额外的信息,这是不可能的。如果这是不可避免的,还有另一种方法来销毁特定的排队作业吗?

2 个答案:

答案 0 :(得分:1)

因为Resque::Job.destroy正在寻找所有参数的完全匹配,所以它对查找ActiveJob类没有帮助。

这是我写的解决这个问题的脚本:

# 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

答案 1 :(得分:1)

this answer here的帮助下,我用这种方式解决了问题:

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