В последнее время в проектах часто приходится создавать демона, который периодически фоном что-то проверяет или отсылает.
Обычно подобную задачу решают с помощью таких пакетов как whevenever, daemon_controller, daemon_generator и т.д. и все казалось бы просто и понятно, но надоело каждый раз городить огород и писать одно и тоже. Мне нужно всего-лишь чтобы раз в час выполнялось какое-нибудь User.notify_all
Презентую loop_dance — gem для быстрого развертывания управляемого демона в рельсовом окружении.
Вставляем пакет в наш Gemfile, незабываем затем обновить bundle
Создаем файлик lib/loop_dance.rb с заданиями и указанной периодичностью.
Например: Каждые 3 часа оповещать всех пользователей. Каждые 60 секунд проверять рапорты.
Вот и все.
Мы создали первого танцора, который запустится автоматически при следующем рестарте рельсовского сервера, будет висеть в системе независимым демоном и с указанной периодичностью выполнять задания.
Можно им управлять и вручную:
А можно и из самого приложения:
Адрес проекта: github.com/dapi/loop_dance
Ссылки по теме:
ruby-toolbox.com/categories/daemon_management.html
ruby-toolbox.com/categories/daemonizing.html
ruby-toolbox.com/categories/scheduling.html
Обычно подобную задачу решают с помощью таких пакетов как whevenever, daemon_controller, daemon_generator и т.д. и все казалось бы просто и понятно, но надоело каждый раз городить огород и писать одно и тоже. Мне нужно всего-лишь чтобы раз в час выполнялось какое-нибудь User.notify_all
Презентую loop_dance — gem для быстрого развертывания управляемого демона в рельсовом окружении.
Условия
- Минимум лишнего кода. Только то, что нужно запустить и с какой периодичностью.
- Код выполняется в рельсовском окружении.
- Демон должен автоматически запускаться/перезапускаться при деплоинге проекта.
- Возможность управлять демоном через 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