Является ли Rails "delayed_job" для задачи cron действительно? - PullRequest
10 голосов
/ 03 сентября 2010

delayed_job в http://github.com/collectiveidea/delayed_job

Может ли delayed_job иметь возможность выполнять задачу cron? Например, запуск сценария каждую ночь в 1:00. Или запускайте скрипт каждые 1 час.

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

Ответы [ 6 ]

21 голосов
/ 03 сентября 2010

Я работал над проектом, который пытался использовать DelayedJob для планирования будущих предметов.Это отстой.

Вместо этого я рекомендую использовать всякий раз, когда камень:

http://github.com/javan/whenever

Всякий раз, когда это рубиновый камень, который обеспечиваетчеткий синтаксис для определения заданий 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 .

4 голосов
/ 03 сентября 2010

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

Проверяйте всякий раз, когда (и его Railscast ), чтобы легко планировать задания cron, которые могут запускать задачи rake (или tor, или shell-скрипты, или что-нибудь еще.) набирайте задания для обновления ваших моделей, а затем устанавливайте контроллер панели управления, который просматривает различные статусы.

3 голосов
/ 04 апреля 2012

Вы также можете использовать гем ClockWork: https://github.com/adamwiggins/clockwork-rails-dj

Заводной механизм работает как отдельный демон и может использоваться для запуска заданий любого рода, которые либо добавляются в систему очередей заданий, либо запускаются сразу же.

Используйте Delayed_Job для того, для чего он хорош, систему очередей заданий, которая может быть распределена по нескольким узлам (или нет).Используйте что-то еще, чтобы добавить задания в очередь в нужное время.

Я использовал rake (или runner) / cron / всякий раз, когда gem планировал фоновые задачи, но обнаруживал, что нагрузка на сервер была настолько высокой, чтобыть постоянно пораженным граблями / бегунами, загружающими окружающую среду рельсов.Рабочие Delayed_Job - это ваши демоны rails, которые продолжают работать, поэтому вы не запускаете Rails каждый раз, когда требуется фоновая задача.

2 голосов
/ 29 октября 2010

Я запускаю несколько cron delayed_jobs для ночной статистики и генерации отчетов, а также для удаления данных через определенные интервалы. Вот как я это делаю:

https://aaronvb.com/articles/recurring-delayed-job-with-cron.html

2 голосов
/ 03 сентября 2010

Всякий раз, когда прекрасно работает.

Мне тоже нравится rufus-scheduler

/config/initializers/task_scheduler.rb

Тогда в этом файле:

scheduler = Rufus::Scheduler.start_new  

scheduler.every("1m") do  
   DailyDigest.send_digest!  
end 

Я изначально нашел это сообщение здесь

Я пробовал, и это хорошо работает.

обновление

Теперь, когда я оглядываюсь назад на эту ссылку, это практически единственная рельсовая компания, на которую я бы хотел работать. Они сделали много драгоценных камней и так много добавили к сообществу. Не говоря уже о том, что у них огромная команда!

0 голосов
/ 25 мая 2014

Я создал для этого камень:

https://github.com/sellect/delayed_cron

В настоящее время он работает с sidekiq и delayed_job.Глядя, чтобы добавить Resque в ближайшее время.Я знаю, что уже немного поздно, но это в точности соответствует тому, что вы искали.

...