Действительно ли Rails "delayed_job" для задачи cron?
delayed_job находится в http://github.com/collectiveidea/delayed_job
Может ли delayed_job иметь возможность выполнять задачу cron? Например, запуск script каждую ночь в 1 час ночи. Или запустите script каждые 1 час.
Если нет, то какие подходящие камни могут это сделать? И можно ли его удаленно отслеживать с помощью браузера и регистрировать успех и ошибку?
Ответы
Ответ 1
Я работал над проектом, который пытался использовать DelayedJob для планирования будущих элементов. Он сосал.
Вместо этого я рекомендую использовать камень каждый раз:
http://github.com/javan/whenever
Всякий раз, когда это драгоценный камень Ruby, который обеспечивает ясный синтаксис для определения заданий cron. Он выводит действительный синтаксис cron и может даже напишите свой файл crontab для вас. Он разработан, чтобы хорошо работать с Rails приложений и могут быть развернуты с Capistrano. Всякий раз, когда работает отлично независимо друг от друга.
Код выглядит так (из github)
every 3.hours do
runner "MyModel.some_process"
rake "my:rake:task"
command "/usr/bin/my_great_command"
end
every 1.day, :at => '4:30 am' do
runner "MyModel.task_to_run_at_four_thirty_in_the_morning"
end
every :hour do # Many shortcuts available: :hour, :day, :month, :year, :reboot
runner "SomeModel.ladeeda"
end
every :sunday, :at => '12pm' do # Use any day of the week or :weekend, :weekday
runner "Task.do_something_great"
end
Здесь RailsCast видео о том, как его использовать.
И соответствующий ASCIICast.
Ответ 2
Я думаю, что cron - лучший инструмент для этого, чем delayed_job. Раньше я использовал его в проекте, и он действительно выделяется при выполнении задачи в фоновом режиме или в определенное время. Но для повторяющихся задач, которые происходят в основное время, я думаю, что cron - лучший инструмент.
Отметьте whenever (и его Railscast), чтобы легко планировать задания cron, которые могут запускать задачи rake (или скрипты, или сценарии оболочки, или что-либо еще.) Вы можете использовать задачи rake для обновления своих моделей, а затем иметь какой-то контроллер панели управления, который смотрит на различные статусы.
Ответ 3
Я запускаю несколько cron delayed_jobs для ночной статистики и создания отчетов, а также для сбора данных через определенные промежутки времени. Вот как я это делаю:
https://aaronvb.com/articles/recurring-delayed-job-with-cron.html
Ответ 4
Вы также можете использовать камкордер ClockWork:
https://github.com/adamwiggins/clockwork-rails-dj
Clockwork запускается как отдельный демон и может использоваться для запуска заданий любого типа, которые либо добавляются в систему очередей заданий, либо запускаются сразу.
Используйте Delayed_Job для того, для чего он хорош, система очередей заданий, которая может быть распределена по нескольким узлам (или нет).
Используйте что-то еще, чтобы добавить задания в очередь в нужное время.
Я использовал rake (или runner)/cron/when gem, чтобы запланировать фоновые задачи, но обнаружил, что загрузка моего сервера была настолько высокой, что я постоянно получаю удар, когда rake/runner загружает среду рельсов.
Работники Delayed_Job - это ваши рельсовые демоны, которые продолжают работать, поэтому вы постоянно не запускаете Rails каждый раз, когда требуется фоновая задача.
Ответ 5
Всякий раз, когда хорошо работает.
Мне также нравится rufus-scheduler
/config/initializers/task_scheduler.rb
Затем в этом файле:
scheduler = Rufus::Scheduler.start_new
scheduler.every("1m") do
DailyDigest.send_digest!
end
Я изначально нашел это сообщение здесь
Я пробовал, и он работает хорошо.
Обновление
Теперь, когда я оглядываюсь на эту ссылку, это в значительной степени единственная компания-рельс, над которой я бы хотел работать. Они сделали несколько драгоценных камней и так много добавили к сообществу. Не говоря уже о том, что у них огромная команда!
Ответ 6
Я создал для этого камень:
https://github.com/sellect/delayed_cron
В настоящее время он работает с sidekiq и delayed_job. Глядя, чтобы добавить resque в ближайшее время. Я знаю, что это немного поздно, но это в значительной степени соответствует тому, что вы искали.