如何查询延迟作业处理程序

Posted

技术标签:

【中文标题】如何查询延迟作业处理程序【英文标题】:how to query delayed_job handler 【发布时间】:2012-03-24 06:45:21 【问题描述】:

我在玩delayed_job,需要删除所有指定handler值的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】:

您正在使用 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

【讨论】:

您可以在属性之前使用空格并在之后使用换行符以避免检查每个 payload_object - 例如延迟::Job.where("handler LIKE '% user_id: #self.id%\n'")

以上是关于如何查询延迟作业处理程序的主要内容,如果未能解决你的问题,请参考以下文章

如何在 Rails 开发中忽略延迟作业查询日志记录

何时使用 - 延迟作业与 RabbitMQ

rspec 中未处理延迟作业

postgres 上的这个延迟作业查询的最佳索引是啥?

启动或确保延迟作业在应用程序/服务器重新启动时运行

如何使 ExceptionNotifier 在 Rails 3 中与延迟作业一起使用?