Pull to refresh

loop_dance — фоновый планировщик быстрого развертывания

Reading time2 min
Views1.4K
В последнее время в проектах часто приходится создавать демона, который периодически фоном что-то проверяет или отсылает.

Обычно подобную задачу решают с помощью таких пакетов как whevenever, daemon_controller, daemon_generator и т.д. и все казалось бы просто и понятно, но надоело каждый раз городить огород и писать одно и тоже. Мне нужно всего-лишь чтобы раз в час выполнялось какое-нибудь User.notify_all

Презентую loop_dance — gem для быстрого развертывания управляемого демона в рельсовом окружении.

Условия


  1. Минимум лишнего кода. Только то, что нужно запустить и с какой периодичностью.
  2. Код выполняется в рельсовском окружении.
  3. Демон должен автоматически запускаться/перезапускаться при деплоинге проекта.
  4. Возможность управлять демоном через rake-задачи или прямо из приложения (приятно видеть на админке его статус)

Танцуем


Вставляем пакет в наш Gemfile, незабываем затем обновить bundle

gem "loop_dance"


Создаем файлик lib/loop_dance.rb с заданиями и указанной периодичностью.

Например: Каждые 3 часа оповещать всех пользователей. Каждые 60 секунд проверять рапорты.

 class Dancer1 < LoopDance::Dancer

   every 3.hours do
      User.notify_all
   end

   every 60.seconds do
      Report.checks
   end

 end


Вот и все.

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

Можно им управлять и вручную:

rake loop_dance:start_all
rake loop_dance:stop_all
rake loop_dance:status

rake loop_dance:dancer1:start
rake loop_dance:dancer1:stop
rake loop_dance:dancer1:status


А можно и из самого приложения:

Dancer1.start  unless  Dancer1.running?


Адрес проекта: github.com/dapi/loop_dance

Ссылки по теме:
ruby-toolbox.com/categories/daemon_management.html
ruby-toolbox.com/categories/daemonizing.html
ruby-toolbox.com/categories/scheduling.html
Tags:
Hubs:
+30
Comments21

Articles