Повторяющееся расписание с использованием delayed_job - PullRequest
4 голосов
/ 20 марта 2011

Можно ли сделать следующее, используя delayed_job:

  1. Определите класс с именем Tasks

  2. Метод через Задачи запускается через каждые 5 минут: Tasks.do_processing

  3. Когда наступит следующий 5-минутный цикл, выполните Tasks.do_processing только , если предыдущий do_processing завершен

Это что-то, что я должен создать сам или может delayed_job (или какой-нибудь другой гем / плагин) сделать это?

Ps. Я знаю о заданиях cron на уровне ОС, но если бы я использовал это, это означало бы, что каждый раз, когда cron «запускал», он перезагружал всю среду Rails, тогда как только delayed_job нужно загрузить его один раз.

Ответы [ 6 ]

5 голосов
/ 15 июня 2011

Если вы хотите сделать что-то похожее на это:

class MyJob

  run_every 1.day

  def perform
    # code to run ...
  end

end

, попробуйте этот код: https://gist.github.com/1024726

5 голосов
/ 20 марта 2011

Вы можете подумать о создании задачи Rake или других подобных автономных процессов, которые позаботятся об этой функции, а затем обернуть ее Daemons :

Что такое демоны?

Daemons предоставляет простой способ обернуть существующие скрипты ruby ​​(например, самописный сервер) для запуска в качестве демон и управляться простым команды пуска / остановки / перезапуска.

Если вы хотите, вы также можете использовать демонов запускать блоки кода ruby ​​в демоне обрабатывать и контролировать эти процессы из основного приложения.

Помимо этой базовой функциональности, Daemons предлагает множество дополнительных функций как отслеживание исключений и ведение журнала (в случае сбоя вашего скрипта ruby) и мониторинг и автоматический перезапуск ваши процессы в случае сбоя.

1 голос
/ 27 марта 2015

Думаю, я могу добавить, что камень delayed_job_recurring является расширением сущности ответа @ kares.

Пример использования:

class MyTask
  include Delayed::RecurringJob
  run_every 1.day
  run_at '11:00am'
  timezone 'US/Pacific'
  queue 'slow-jobs'
  def perform
    # Do some work here!
  end
end

И запланировать его.В приложении rails вы можете поместить это в инициализатор:

MyTask.schedule!
1 голос
/ 10 февраля 2012

Мы уже некоторое время используем версию этого для DJ 2.1.Никаких хакерских атак, используются встроенные крючки с отложенными заданиями.Просто убедитесь, что вы добавили столбец с именем 'queue' в таблицу отложенных заданий, что, как мне кажется, DJ 3 все равно добавило в таблицу.

0 голосов
/ 23 сентября 2015

Вы можете использовать https://github.com/codez/delayed_cron_job, который является плагином для отложенных заданий, для установки периодических заданий.

0 голосов
/ 20 марта 2011

Повторяющееся задержанное задание:

http://rifkifauzi.wordpress.com/2010/07/29/8/

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