Работа с очень долгим заданием - PullRequest
14 голосов
/ 26 марта 2012

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

Возможные решения, которые я нашел:

  1. Настройка задания cron
  2. delayed_job
  3. resque

cron кажется простым решением для установки, но идеально ли этодля очень долгой задачи?Что вы используете и каковы преимущества / недостатки вашего решения?

Ответы [ 2 ]

31 голосов
/ 26 марта 2012

Лично я люблю Resque, вы можете использовать гем resque-scheduler для работы с длительными или периодическими задачами.

Если вам не нужно запускать свою задачу очень часто, вы можете демонизировать задачу rake, чтобы убедиться, что она продолжает выполняться, если ваш сеанс SSH умирает или что-то в этом роде.

Попробуйте что-то вроде этого:

nohup rake my:task &

nohup отправит вывод в nohup.out в каталоге, в котором вы запускаете задачу, а также позволит оставить сеанс ssh без остановки процесса, во-вторых, & запустит его как демон.

1 голос
/ 26 марта 2012

В одном приложении, которое я создал, пользователи имели возможность загружать PDF-файлы, которые были загружены при загрузке для создания изображений для предварительного просмотра.Поскольку PDF-файлы могут быть очень большими, миниатюры могут занять некоторое время и работать в фоновом режиме.Для этого я использовал

  • Скрепка для загрузки,
  • delayed_paperclip gem для передачи миниатюр в фоновый процесс,
  • Resque , при поддержке Redis , для обработки очереди работника, и
  • гем God , чтобы запуститьRedis и Resque рабочие и контролируют весь shebang.

С положительной стороны, вы получаете отличный графический интерфейс Resque для просмотра ваших рабочих в действии, и у вас есть Бог, чтобы следить (и убивать)и перезапустите) ускоренные процессы (которые обычно происходят довольно часто при обработке PDF-файлов в ImageMagick), что делает все это намного более стабильным и надежным.

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

Надеюсь, это поможет!

...