Могу ли я запускать и останавливать работников delayed_job из моего приложения Rails?

У меня есть приложение, которое может извлечь выгоду из delayed_job и некоторой фоновой обработки. Дело в том, что мне не нужно /не нужно, чтобы работники delayed_job работали постоянно.

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

Можно ли запускать и останавливать обработку заданий (с помощью сценария или задачи rake) из моего приложения только после определенных действий /событий?

4 голоса | спросил Callmeed 12 42009vEurope/Moscow11bEurope/MoscowThu, 12 Nov 2009 23:52:41 +0300 2009, 23:52:41

4 ответа


0

Вы можете вызвать систему:

system "cd #{Rails.root} && rake delayed_job:start RAILS_ENV=production"

Вы можете просто изменить delayed_job, чтобы проверять тоже реже. Вместо 5 секунд по умолчанию установите 15 минут или что-то в этом роде.

ответил wesgarrison 13 52009vEurope/Moscow11bEurope/MoscowFri, 13 Nov 2009 00:23:15 +0300 2009, 00:23:15
0

Да, вы можете, но я не уверен, какая выгода будет. Вы говорите, что не хотите, чтобы работники работали постоянно - что вас беспокоит? Использование памяти? Соединения с базой данных?

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

Delayed::Worker::sleep_delay = 60 * 5  # in your initializer.rb

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

Но если вы действительно хотите запустить Delayed::Worker программно, найдите в этом классе work_off и реализуйте свой собственный скрипт script/run_jobs_and_exit. Вероятно, он должен выглядеть так же, как script/delayed_job - 3 строки.

ответил Jonathan Julian 13 52009vEurope/Moscow11bEurope/MoscowFri, 13 Nov 2009 07:41:48 +0300 2009, 07:41:48
0

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

http://viatropos.com /блог /как-работай-фон-заданий-на-Heroku-за свободной /

Это немного устарело. В теме есть интересный комментарий:

"Когда мне нужно отправить электронное письмо, скопировать файл и т. д., я в основном добавляю его в очередь. В конце каждого запроса он проверяет, есть ли что-либо в очереди. Если это так, то он использует Heroku API для установки работника на 1. В конце работника, выполняющего задачу, он проверяет, осталось ли что-либо в очереди. Если нет, то он устанавливает рабочих обратно на 0. Конечный результат - фоновый работник. просто поработайте несколько секунд здесь и там. Я могу выполнить всю необходимую фоновую обработку, и счет в конце месяца редко достигает 1 часа общей стоимости работы. Даже если это не проблема, я заплачу $ 0,05 для фоновой обработки. :) "

ответил Samantha John 10 FebruaryEurope/MoscowbThu, 10 Feb 2011 05:40:23 +0300000000amThu, 10 Feb 2011 05:40:23 +030011 2011, 05:40:23
0

Если вы идете, чтобы остановить работника, вам выдается PID. Вы можете просто убить -9 PID, если ничего не помогает.

ответил Shawn Deprey 12 Jam1000000amSat, 12 Jan 2013 06:50:06 +040013 2013, 06:50:06

Похожие вопросы

Популярные теги

security × 330linux × 316macos × 2827 × 268performance × 244command-line × 241sql-server × 235joomla-3.x × 222java × 189c++ × 186windows × 180cisco × 168bash × 158c# × 142gmail × 139arduino-uno × 139javascript × 134ssh × 133seo × 132mysql × 132