ruby 如何停止延迟作业的运行

biswetbf  于 2023-08-04  发布在  Ruby
关注(0)|答案(1)|浏览(93)

是否可以在运行之前使用延迟作业的挂接将其停止?
如果是,怎么做?

class Jobs::SomeJob < Struct.new
  
  def before(job)
    if should_not_run_job
      # Do I raise an exception?
      # Is there an official way to stop a Job from running?
    end
  end
  
  def perform
   # Working...
  end
 

  def queue_name
    return "SomeJob";
  end

end

字符串
是否引发错误?建议使用哪种挂钩?

mcdcgff0

mcdcgff01#

引发异常是不起作用的,因为重试机制会启动,并重试运行作业几次。
相反,我只需要在perform方法的第一行添加一个保护子句,当条件不再是true时,它将返回而不执行任何操作。这取决于你的情况,但像这样的东西可能对你有用:

def perform
  return if job_should_not_run_anymore?

  # Working
end

private

def job_should_not_run_anymore?
  # Condition
end

字符串
当你的条件是基于job本身的,它只在像before这样的钩子方法中可用,而在perform方法中不可用,那么我会将条件的结果存储在一个示例变量中,并在perform方法中检查该变量,如下所示:

def before(job)
  @outdated = job.run_at > 15.minutes.ago
end

def perform
  return if @outdated

  # Working
end

相关问题