Как запустить грабли с помощью cron всего два раза?
Я хочу знать, есть ли способ в RoR запустить задачу rake или код ruby дважды в разное время. Например, когда пользователь регистрируется, запустите задачу через три дня, а затем запустите ту же задачу через неделю, но не более ("остановите процесс"). Я смотрел на crontab и драгоценные камни, такие как Resque, Stalker, Starling и т. Д., Но у меня нет ясного представления, кому эти драгоценные камни могут помочь мне. Я имею в виду запуск демона для каждого пользователя и подсчет выполнения задач. Проблема в том, что демон все это время будет активен, "съедая" ресурсы. Есть ли способ использовать как можно меньше ресурсов? Я хочу запустить это в Heroku позже.
3 ответа
Я обычно решаю эту проблему с помощью столбцов даты в записи (например, first_reminder_sent_at, user_responed_at, week_reminder_sent_at). В этом случае, дата для первого элемента, ответ пользователя и для элемента на неделю позже.
Создайте задачу cron для вызова задачи rake - просмотрите всех пользователей, которым> 3 дня, < 1 неделя, пользователь не ответил, дата не установлена. Поставьте в очередь фоновое задание. Работа отправит письмо (или что-то еще), а затем установит поле даты в записи.
Задача Cron для вызова грабли - просматривает всех пользователей старше 1 недели, где пользователь не ответил и дата не установлена. Отправьте напоминание и установите дату в фоновом режиме.
Системы Posix имеют at
Команда, которая представляет собой простой и простой способ запланировать выполнение задания один раз в более позднее время. Хотя нет ничего плохого в использовании основанного на приложениях механизма очередей для планирования дальнейшей работы, как описано в других ответах. at
зависит от хоста, поэтому, вероятно, не подходит, если вы используете кластер, особенно если хосты могут быть временными.
Попробуйте всякий раз, когда cron и создайте задачу rake, которая делает ваши вещи... и в базе данных сделайте несколько полей триггера, когда и как задача rake должна выполнять свои действия...