Sidekiq - 删除任务时删除预定作业

时间:2014-09-26 20:14:16

标签: ruby-on-rails sidekiq

当用户使用create操作中的以下代码为特定日期创建任务时,我会安排提醒电子邮件:

if @post.save
  EmailWorker.perform_in(@time.minutes, @post.id)
end

我想删除关联的任务时删除预定的提醒邮件。我尝试在before_destroy上使用模型方法:

before_destroy :destroy_sidekiq_job

def destroy_sidekiq_job
  post_id = self.id
  queue = Sidekiq::Queue.new('critical')
  queue.each do |job|
    if job.klass == 'EmailWorker' && job.args.first == post_id
      job.delete
    end
  end
end

但是,作业不会从队列中删除。有什么建议让我解决这个问题吗?

2 个答案:

答案 0 :(得分:6)

不要这样做。让Sidekiq执行作业,但验证帖子是否存在,并且当电子邮件作业运行时是

def perform(post_id)
  post = Post.find_by_id(post_id)
  return unless post

  ...
end

答案 1 :(得分:4)

预定作业尚未在队列中,使用Sidekiq::ScheduledSet查找预定作业:

def destroy_sidekiq_jobs
  scheduled = Sidekiq::ScheduledSet.new
  scheduled.each do |job|
    if job.klass == 'EmailWorker' && job.args.first == id
      job.delete
    end
  end
end