Я закончил тем, что написал свою собственную библиотеку в порыве неконтролируемого бритья яка. Комплект демона был правильной общей идеей, но серьезно слишком тяжелым для моих нужд. Я не хочу что-то похожее на полноценное приложение для каждого из моих демонов. Я собираюсь закончить как минимум 3-мя демонами, и это будет колоссальный беспорядок в каталогах. У гема демонов ужасный API, и, хотя у меня возникло желание абстрагировать его, я понял, что, вероятно, проще было просто самому управлять вилкой, вот что я и сделал.
API выглядит так:
require "rubygems"
require "chaingang"
class Worker
def setup
# Set up connections here
end
def teardown
# Tear down connections here
end
def call
# Do some work
sleep 1
end
end
ChainGang.prepare(Worker.new)
И затем вы просто используете включенную задачу граблей для запуска / остановки / перезапуска или проверки состояния. Я взял страницу из книги игр Rack: все, что реализует метод call
, является честной игрой в качестве аргумента для методов ChainGang.prepare и ChainGang.work, поэтому Proc
является допустимым рабочим объектом.
Мне потребовалось больше времени, чтобы построить, чем использовать что-то еще, но у меня есть смутное подозрение, что это окупится в долгосрочной перспективе.