rails cron job overlap

时间:2016-01-16 13:21:35

标签: ruby-on-rails heroku cron

我使用heroku调度程序每10分钟运行一次任务。任务正如下所示。我正在考虑如何防止下一个工作与当前工作重叠。有没有可以防止cron作业重叠的问题?

task force_close: :environment do
    #get all unvoted wine_question
    questions = Question.where(closed: false)
    puts "Total #{questions} of wine_question will be closed"

    finish_count = 0
    questions.each do |question|
      begin
        question.force_close!
        finish_count += 1
      rescue StandardError => bang
        puts "question #{self.id} error when running #{bang}"
      end
    end

    puts "Total #{finish_count} of question was closed"
  end

1 个答案:

答案 0 :(得分:0)

有两种方式。

首先,
在问题上创建选中的字段。像force_closed:boolean 并在调用force_close!方法时触摸force_closed字段 所以你可以通过where(closed: false, force_closed: false)

找到问题

其次,
创建批次历史记录表。列应为task_namerun_at 并在批处理历史记录表中保存运行时间信息,

# last line of task
BatchHistory.create(task_name: 'force_close', run_at: Time.now)