Подтвердить что ты не робот

Работа с очень длительной работой рейка

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

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

  • Настроить задание cron.
  • delayed_job
  • спасательное

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

4b9b3361

Ответ 1

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

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

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

nohup rake my:task &

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

Ответ 2

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

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

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

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

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