当用户使用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
但是,作业不会从队列中删除。有什么建议让我解决这个问题吗?
答案 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