2013-11-28 3 views
1

Я планирую использовать задачу рейка, чтобы разработать длинный фоновый процесс для моего приложения rails. Являются ли рейк-задачи подходящими для такого рода процессов? В идеале я хотел бы обернуть его внутри демон linux, чтобы он мог легко начать и завершить процесс.Являются ли рейк-задачи подходящими для длительных процессов производства?

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

Спасибо!

+0

Это зависит от ваших потребностей, но cron-подобные работы часто обрабатываются драгоценным камнем, названным богом: http://godrb.com/ –

+0

Какую работу он будет обрабатывать? – retro

+0

@retro будет обновлять сводную таблицу, извлекать новые и обновленные записи для пересчета средних, сумм и сумм. –

ответ

1

Вы можете попробовать delayed job с этим extension ,

class MyJob 

    include Delayed::ScheduledJob 

    run_every 1.day 

    def display_name 
    "MyJob" 
    end 

    def perform 
    # code to run ... 
    end 
end 

Или вручную епдиеие другую работу с Time.now + 5.minutes, например, после того, как текущая работа закончена внутри выполнения метода.

+0

Nice! Я никогда бы не подумал об этом решении! Умный и простой. –

0

Вы посмотрели драгоценный камень delayed_job?

https://github.com/collectiveidea/delayed_job

Из их документации:

Задержка :: Работа (или DJ) инкапсулирует общий образец асинхронно выполнения длительных задач в фоновом режиме.

Это прямое извлечение из Shopify, где таблица заданий отвечает за множество основных задач. Среди этих задач являются:

  • посылая массовые рассылки
  • изменения размеров изображений
  • HTTP загрузки
  • обновления смарта-коллекция
  • обновления Solr, наш поиск сервера, после того, как продукт изменение
  • импорта партии
  • спам-тесты
+1

Я бы посоветовал sidekiq over delayed_job. Он использует потоки, использует меньше ресурсов и более стабилен в моем опыте. –

+1

Да, я беспокоюсь о задержанной работе и т. Д. - это то, что я не понимаю с доступной документацией. Что произойдет, если моя работа будет запланирована каждые 5 минут, но это займет 10 минут? То почему im стремясь к подходу «обслуживания окон» –

+0

спасибо, я буду держать его в виду в следующий раз, когда я использую delayed_job :) – cgiacomi

0

это может зависеть от типа фоновых заданий, которые нужно запустить.

В принципе, если вам нужна какая-то почтовая обработка данных, которые вводят пользователи, например, рендеринг изображений для сообщений, асинхронная интеграция с сторонними ресурсами и т. Д., Тогда вам лучше использовать Sidekiq (да, это лучше, чем DelayedJob как было предложено людьми)

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

 Смежные вопросы

  • Нет связанных вопросов^_^