Запуск задачи Rake через переменные интервалы - PullRequest
1 голос
/ 18 октября 2011

Я использую всякий раз (https://github.com/javan/whenever) ruby ​​gem для вставки записи crontab в обратный вызов after_create модели X. Эта запись инструктирует выполнение задания каждые 45 минут. Но я хочу передать пользователю контроль, где он укажите временной интервал. Таким образом, процесс идет так:

  1. Пользователь создает Модель X, я вставляю запись crontab для выполнения задания через 45 минут.
  2. Пользователь видит, что 45 минут недостаточно, он хочет изменить временной интервал с UI на 30 минут (обратите внимание, что это элемент управления HTML / UI, где он должен это делать).
  3. Позже он сможет изменять интервал времени любое количество раз.

Ценится любой драгоценный камень или любая идея о том, как мы можем достичь этого. Я открыт для любой версии rails и могу начать реализацию с любого, так как эта функция составляет ядро ​​функциональности.

Спасибо.

1 Ответ

4 голосов
/ 18 октября 2011

Мне не нравится подход вашего решения. Это означает, что если в будущем ваше приложение будет иметь 2k пользователей, вы запустите 2k crontabs?

Вместо создания одного crontab для каждого пользователя, просто создавайте его каждую минуту. Сохраните в пользовательской модели информацию о частоте crontab для этого пользователя и времени последнего выполнения crontab.

Затем, когда основной crontab запускается каждую минуту, проверьте, какие пользователи имеют last_crontab_at + frequency < Time.current, и запустите сценарий для этих пользователей.

Таким образом, приложение будет масштабироваться независимо от количества пользователей.

Кроме того, помните, что crontabs являются локальными для сервера. Что произойдет, если вам придется сменить сервер или создать кластер? Я предлагаю вам подумать об использовании службы фоновой обработки или очереди.

...