Как запускать работу cron каждые 10 секунд в ruby ​​на рельсах - PullRequest
0 голосов
/ 16 февраля 2019

Я пытаюсь запускать задание cron каждые 10 секунд, которое запускает фрагмент кода.Я использовал подход, который требует запуска кода и его бездействия на 10 секунд, но, похоже, он резко снижает производительность приложения.Я использую всякий раз, когда драгоценный камень, который работает каждую минуту и ​​спит в течение 10 секунд.Как я могу добиться того же без использования метода сна.Ниже приведен мой код.

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

    def self.process_notes
        notes = nil
        time = Benchmark.measure do
          Note.uncached do
            notes = Note.where(status: false)
            notes.update_all(status: true)
          end
        end
        puts "time #{time}"
      end
    end

Цель моего кода - изменить логическое состояние объектов на true , которое проверяется каждый раз10 секунд.В этой таблице 2 миллиона записей.

Ответы [ 2 ]

0 голосов
/ 16 февраля 2019

Я бы предложил использовать для этого фоновые задания Sidekiq.С гемом sidekiq-scheduler вы можете запускать обычные расписания заданий sidekiq в любом внутреннем порядке.Бонусные баллы за наличие веб-интерфейса для обработки и мониторинга заданий через гем Sidekiq.

0 голосов
/ 16 февраля 2019

Вы бы использовали часовой механизм драгоценный камень.Это работает в отдельном процессе.Конфигурация довольно проста.

require 'clockwork'
include Clockwork

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