Recentemente, tive a necessidade de escrever algum código que executasse ping em um serviço da web em um intervalo regular (tinha que ser muito preciso devido à limitação de taxa) e fazer uma ação definida com o resultado.
Para escrever isso, primeiro coloquei tudo em uma classe MyService
,. Mas então tive que encontrar uma maneira de repetir essa funcionalidade a cada 5 segundos. No início, tentei Delayed::Job
, mas não era muito preciso e iria engolir as tabelas do banco de dados com registros ao longo do tempo, à medida que injetava continuamente novas linhas. Não havia nada dinâmico na natureza, então fazia sentido usar outra tecnologia.
Em vez disso, escolho escrever um daemon usando a daemons
gema e, em seguida, uso a rev
biblioteca para escrever um loop de evento.
Código completo disponível: https://gist.github.com/4276211
Isso me permite iniciar o serviço a partir da linha de comando e garantir que ele seja executado a cada 5 segundos.
$< cd rails_root RAILS_ENV=production script/scheduler restart
Você pode facilmente criar uma receita de capistrano para fazer isso para você ao reiniciar / iniciar / parar seu servidor, da mesma forma que você deve integrar Delayed::Job
em suas receitas.