#ruby-on-rails #ruby-on-rails-3 #heroku
#ruby-on-rails #ruby-on-rails-3 #heroku
Вопрос:
Я пытаюсь создать задание, чтобы отправить уведомление на вызов Twilio, поэтому важно иметь надежное решение, которое может гарантировать, что задания выполняются в определенное время (я не думаю, что помещение в очередь является достаточно точным).
Какое наилучшее решение для такого типа задач?
Эти уведомления должны появляться в определенное время вызова. Например, «осталась 1 минута». Поэтому он должен иметь возможность:
- Запускайте в произвольное время (13:22 или 14:45)
- Определяется пользовательским вводом (они устанавливают время вызова)
(Было бы неплохо, если бы это решение могло выполняться на Heroku)
Ответ №1:
Вы можете использовать Heroku cron
для выполнения заданий ежедневно или ежечасно.
Ежедневный cron бесплатный, почасовой cron стоит 3 доллара в месяц: http://addons.heroku.com/cron .
Обычно cron
выполняется при первом запуске (т. Е. Если вы настроили его на 15:00, оно будет выполняться в 15:00 каждый день), но вы можете изменить это, отправив электронное письмо на support@heroku.com .
Чтобы запустить код в cron, добавьте свой код в cron.rake
файл и ознакомьтесь с документами cron здесь.
К вашему сведению
Собственные образцы Heroku для cron предлагают выполнять проверку времени, т.Е.
if Time.now.hour % 4 == 0 # run every four hours
...
Но, если вы запускаете ежедневный cron, код будет выполняться в то время, когда, скорее всего, произойдет сбой вышеуказанного условия. Итак, если вы не платите за почасовую работу cron и хотите, чтобы она выполнялась только в течение определенных часов, оставьте эту часть их примера кода и просто включите свой собственный код обычным образом.
Выполняется в определенное время
Попробуйте использовать столбец delayed_job
‘s :run_at
, который может дать вам гибкость, необходимую для выполнения заданий в строго определенное время.
Heroku Docs:http://devcenter.heroku.com/articles/delayed-job
Комментарии:
1. Это не сработает, если я пытаюсь отправить уведомление в вызове. Должна быть возможность выполнения поминутно (я обновлю свой вопрос, чтобы он был более понятным)
2. К вашему СВЕДЕНИЮ — надстройка, упомянутая в этом ответе, теперь называется heroku scheduler
Ответ №2:
Для этого вам нужно добавить cronjob. Если вы используете Linux, вы можете добавить cron в crontab и указать время, в которое оно выполняется. Это очень гибко. Вы можете найти подробности здесь:
http://en.wikipedia.org/wiki/Cron
Если вы хотите сделать это способом ruby, попробуйте всякий раз, когда gem:
https://github.com/javan/whenever
Комментарии:
1. Разве это не требует, чтобы вы знали время до раздачи? Или вы можете произвольно настроить его?
2. Если вы хотите запускать cron в произвольное время, то вы можете написать другой cron, который продолжает обновлять crontab с новым произвольным временем. Cron, который обновляет crontab, должен запускаться чаще, скажем, каждые 1 или 5 минут, и он добавляет запись для нового произвольного времени. Вам нужно будет написать другой cron для очистки crontab (выполненных cron), и он может запускаться один раз в день. Я надеюсь, вы поняли подход.
3. Следует придерживаться описанного выше подхода, если вы понятия не имеете, когда будет запущен cron, и время генерируется где-то в коде. Если вы можете решить, что оно выполняется на 7-й день, 2-й час каждого месяца и т.д. и т.п., Тогда вам следует взглянуть на примеры cron. Они очень, очень гибкие, и вы можете достичь любого времени, используя различные комбинации. Вероятно, вам нужно пересмотреть свой подход. Вы могли бы сбросить все эти записи в таблицу с отметкой времени (когда выполнять), и cron запускается каждые 1 минуту и отправляет уведомления, где (временная метка — Time.now) < пороговое значение. Пороговое значение также может быть в базе данных.
Ответ №3:
Для конкретного случая, который вы упомянули, я думаю, вам следует попробовать delayed_job:
https://github.com/collectiveidea/delayed_job#readme
в нем есть опция run_at, где вы можете указать время, в которое вы хотите запустить задание.
Ответ №4:
Перейдите к заданиям cron в панели управления хостингом