如何查询邮件程序任务

How to Query A Mailer Task

我正在尝试通过控制器中的 'destroy' 方法让我的系统在删除相关对象时自动删除相关的计划 sidekiq 任务。

有问题的任务是添加到 sidekiq 'scheduled' 队列中的 Action Mailers。在特定点,我需要检查这些任务中的每一个并将参数与模型 ID 进行比较。

为此,我填充了一组计划任务,并遍历它们;

scheduled_queue = Sidekiq::ScheduledSet.new
scheduled_queue.each do |job| 
  condition = true if job.args[0] == @object.id
end

但是我无法将参数操纵成任何可比较的形式。所有参数似乎都出现在 job.args 数组的 [0] 中。

<%= job.args.size %> #Returns 1
<%= job.args.first %> #Returns below
---
job_class: ActionMailer::DeliveryJob
job_id: 28c966f3-3fbd-4963-a9cc-64e609803246
provider_job_id: 
queue_name: mailers
priority: 
arguments:
- ResponseMailer
- reminder_email
- deliver_now
- 29
- Third reminder
- 9095
executions: 0
locale: en
<%= job.args.first.class %> #Returns !ruby/class 'Hash'

显然这是一个散列,但 job.args.first.keys 会引发错误。

undefined method `keys' for 9:Integer

如何比较变量与邮件参数?

设法找到访问特定参数的代码 (x);

job.args.first['arguments'].[x]

未定义的方法 'keys' 错误是由计划队列中的任务格式不同引起的。我的错误是遍历队列中的每个任务,而不是过滤掉不相关的任务。