Rails控制作业执行

时间:2017-12-05 06:17:26

标签: ruby-on-rails jobs

我创建的作业使用rails g job cleanUp

是否有任何选项可以检查Job是否正在运行?像这样CleanUpJob.isRunning?

如果没有额外的宝石,哪里无法做到最好?这将是最简单的? delayed_job的?

控制Job的第二件事是进步,任何想法如何实现CleanUpJob.progress或progress_job应该是我的选择?

简要地:

我需要用两种方法创建一个作业(isRunning?,progress)。 如果可能的话,我真的不想要额外的表格。

1 个答案:

答案 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