Простое планирование задач внутри приложения Rails - PullRequest
3 голосов
/ 05 февраля 2010

Есть ли способ настроить простое планирование задач внутри приложения rails? Есть фрагменты кода, которые я хочу запускать каждый час, каждый день или каждую неделю. Я не хочу разбивать их на отдельные сценарии, которые я затем должен планировать с помощью заданий cron. Если бы я это сделал, то мне пришлось бы не забыть сделать резервную копию сценариев, и если я перестроил сервер, мне пришлось бы пойти и добавить обратно все задания cron, это просто немного беспорядочно для того, что мне нужно.

Хотелось бы, чтобы я мог просто запланировать задания где-нибудь в моем приложении rails и заставить их волшебным образом запускаться, когда я хочу! Есть идеи?

Ответы [ 3 ]

3 голосов
/ 05 февраля 2010

Для этого есть гемы / плагины, такие как rufus-scheduler или более популярный гем «всегда». Мне нравится решение @douglassellers, хотя я не слышал об этом.

1 голос
/ 06 февраля 2010

Я использую отложенное задание, «базу данных с асинхронной приоритетной очередью» для выполнения чего-то подобного. Посмотрите на http://github.com/tobi/delayed_job

Вам все еще нужно иметь что-то, что запускает 'rake jobs: work', но это лучше, чем иметь много разных заданий cron. Обратите внимание в документации на атрибут: run_at, который выглядит так, как будто он может решить проблему «запланировать задания где-нибудь в моем приложении rails и заставить их волшебным образом запускаться, когда я этого захочу».

0 голосов
/ 05 февраля 2010

Для этого вы можете использовать что-то вроде Rails Cron (gem install rails_cron), что раскручивает другой процесс rails, предназначенный для выполнения запланированных фоновых задач. Я бы не рекомендовал делать это таким образом, так как дополнительный экземпляр rails нужно будет отслеживать, останавливать и запускать вместе с остальной частью вашего приложения, и, по моему опыту, очень склонен к падению.

Лучшее решение - просто использовать Craken, http://github.com/latimes/craken, для управления crontabs через файлы yaml в вашем приложении rails. Каждая запланированная задача определяется в файле yaml, а затем при развертывании Craken решает, нужно ли обновлять файл CronTab системного уровня или нет. Он подключается прямо к вашему файлу развертывания capistrano и находится под ключ. Это дает преимущество в том, что вы по-прежнему можете управлять запланированными задачами в приложении rails и одновременно выполнять их с помощью cron уровня ОС.

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