Rails:取消Sidekiq的预定作业

gee*_*hic 7 ruby-on-rails sidekiq

所以我的模型中有一个Sidekiq工作者,看起来像这样:

class Perk < ActiveRecord::Base

include Sidekiq::Worker
include Sidekiq::Status::Worker

after_save :update_release_time

def update_release_time
  if self.release_time_changed?
    #if scheduled job already exists then cancel and reschedule
    #  Sidekiq::Status.cancel scheduled_job_id
    #  scheduled_job_id = NotifierWorker.perform_at(time.seconds.from_now, .....)
    #elsif scheduled job doesn't exist, then schedule for the first time
    #  scheduled_job_id = NotifierWorker.perform_at(time.seconds.from_now, .....)
    #end
  end
end
end
Run Code Online (Sandbox Code Playgroud)

所以基本上,我的代码检查发布时间是否已经改变.如果有,则必须取消先前安排的作业并在新的时间安排它.我如何实现这一点,即代替我的伪代码?如何检查是否scheduled_job_id存在然后获取其ID?

Mik*_*ham 20

API文档有什么可以做一个概述,但你真的需要潜入源发现的所有功能.

你可以这样做,但效率不高.这是JID查找预定作业的线性扫描.

require 'sidekiq/api'
Sidekiq::ScheduledSet.new.find_job(jid).try(:delete)
Run Code Online (Sandbox Code Playgroud)

或者,您的工作可以查看它在运行时是否仍然相关.