如何查询 delayed_job 处理程序

18

我正在使用delayed_job,并且需要删除所有具有特定处理程序值的作业,我尝试了这种方式

class Auction < ActiveRecord::Base
  def clean_jobs
    Delayed::Job.all.each do |job|
      job.delete if job.payload_object.auction_id == id
    end
  end
end

它可以工作,但我必须遍历整个队列...不太好。我该如何解决这个问题? 谢谢

1个回答

27

您正在使用payload_object,它是一个YAML文本。

也许这段代码可以做同样的事情。

Delayed::Job.where("handler LIKE '%auction_id: #{id}%'").delete_all

并进行二次确认:

Delayed::Job.where("handler LIKE '%auction_id: #{id}%'").each do |job|
  job.delete if job.payload_object.auction_id == id
end

1
你可以在属性前使用空格,在新行字符后使用,以避免必须检查每个payload_object - 例如:Delayed :: Job.where(“handler LIKE'%user_id:#{self.id}%\ n'”) - RidingTheRails

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接