如何在Rails中每10秒运行一次cron作业

时间:2019-02-16 12:15:05

标签: ruby-on-rails ruby ruby-on-rails-4 cron whenever

我试图每10秒运行一次cron作业,该作业运行一段代码。我已经使用了一种方法,该方法需要运行代码并使它休眠10秒钟,但这似乎会使应用程序性能急剧下降。每当宝石每分钟运行一次并睡眠10秒钟时,我就会使用它。如何使用睡眠方法实现相同的效果。以下是我的代码。

age

every 1.minute do
  runner "DailyNotificationChecker.send_notifications"
end

class DailyNotificationChecker
    def self.send_notifications
        puts "Triggered send_notifications"
        expiry_time = Time.now + 57
        while (Time.now < expiry_time)
            if RUN_SCHEDULER == "true" || RUN_SCHEDULER == true
              process_notes
            end
          sleep 10 #seconds
        end

我的代码的目标是将对象的布尔状态更改为 true ,该状态每10秒检查一次。该表有200万条记录。

2 个答案:

答案 0 :(得分:2)

我建议为此使用Sidekiq后台作业。借助sidekiq-scheduler gem,您可以在所需的任何内部运行常规的sidekiq作业计划。具有Web界面以通过Sidekiq gem处理和监视作业的奖励积分。

答案 1 :(得分:1)

您将使用clockwork宝石。它在单独的过程中运行。配置非常简单。

require 'clockwork'
include Clockwork

every(10.seconds, 'frequent.job') { DailyNotificationChecker.process_notes }