我创建的作业使用rails g job cleanUp
。
是否有任何选项可以检查Job是否正在运行?像这样CleanUpJob.isRunning?
如果没有额外的宝石,哪里无法做到最好?这将是最简单的? delayed_job的?
控制Job的第二件事是进步,任何想法如何实现CleanUpJob.progress
或progress_job应该是我的选择?
简要地:
我需要用两种方法创建一个作业(isRunning?,progress)。 如果可能的话,我真的不想要额外的表格。
答案 0 :(得分:0)
您可以将Class: Sidekiq::ScheduledSet
用于此目的。
文档here 此类用于Sidekiq Web界面。
实施例: 设置作业时保存作业ID(jid)。然后你可以调用它来查询实例
def is_running?
require 'sidekiq/api'
ss = Sidekiq::ScheduledSet.new
jobs = ss.select {|ret| ret.jid == self.jid}
jobs.any?
end
或者,您可以使用around_perform
挂钩在Job中设置DB标志。
class SomeJob < ActiveJob::Base
queue_as :some_job
around_perform do |job, block|
start_import_process_log job.arguments[0], job.arguments[1] || {}
block.call
finish_import_process_log
end
# ...
private
def start_import_process_log import_process, options={}
#some actions
end
def finish_import_process_log
end
end
在此示例中,创建了关联的日志记录。 或者你可以使用before_perform / after_perform。
在我的练习中,我在长任务中使用creting日志记录。
当我需要找到并杀死工作时 - 我正在使用Sidekiq::ScheduledSet
。