我在我的rails应用程序中使用sidekiq.我的应用程序的用户创建启动sidekiq作业的报告.但是,有时用户希望能够取消"处理"报告.删除报告很简单,但我也需要能够删除sidekiq作业.
到目前为止,我已经能够获得这样的工人列表:
workers = Sidekiq::Workers.new
Run Code Online (Sandbox Code Playgroud)
并且每个worker都有包含report_id的args,因此我可以识别哪个作业属于哪个报告.但是,我不确定如何实际删除该作业.应该注意的是,我想删除作业当前是忙还是重试.
所以我的模型中有一个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?