Есть ли способ "наблюдать" за новыми вставками таблицы базы данных с помощью задачи грабли? - PullRequest
1 голос
/ 31 марта 2011

У меня есть планировщик rufus, и я планировал просмотреть таблицу расписаний для новых расписаний. Есть способ сделать это? что-то вроде:

schedule.every "1m" do
  #check for new entries in database
end

ОТВЕТИЛ

scheduler.every '1m' do
  #check for new stuff in the database
  newest_jobs = Schedule.all_cron_jobs.select{ |x| x.created_at > 1.minute.ago } - all_schedules_with_cron
  unless newest_jobs.empty?
    newest_jobs.each do |new_job|
      scheduler.every new_job.cron_string do
        job.call
      end
    end
  end
end

jobs.call - это вызов отложенного задания, чтобы поставить его в очередь. Таким образом, в основном, получите самые новые расписания и вызовите для них rufus, чтобы ставить задания в очередь каждый раз, когда cron соответствует

1 Ответ

0 голосов
/ 31 марта 2011

Используйте столбец created_at в таблице, чтобы проверить наличие новых записей с момента последней проверки.

last_checked = 1.minute.ago
schedule.every "1m" do
  new_entries = Schedule.where(['created_at >= ?', last_checked])
  last_checked = Time.now

  # deal with entries here.
end

Вы можете улучшить это, уменьшив разрыв между last_checked циклами еще больше.

Не лучше ли использовать наблюдателя на модели вместо этого? Гарантирует отсутствие промахов из-за проблем со временем.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...