Pergunta

Eu estou usando Delayed Job para gerenciar o trabalho de fundo.
No entanto tenho algumas tarefas que precisam ser executadas em intervalos regulares. A cada hora, todos os dias ou todas as semanas, por exemplo.

Por agora, quando eu executar a tarefa, eu criar um novo para ser executado em um dia / semana / mês.

No entanto, eu realmente não gosto dele. Se por qualquer motivo, a tarefa não é completamente executado, não criamos o próximo e nós podemos perder a execução da tarefa.

Como você gerenciar esse tipo de coisas (com trabalho atrasado) em seus trilhos aplicativos para ter certeza de sua lista de tarefas regulares permanece correto?

Foi útil?

Solução

Se você tem acesso a Cron, eu recomendo Sempre

http://github.com/javan/whenever

Você pode especificar o que você deseja executar e em que freqüência em simples rubi morto, e sempre suprimentos ancinho tarefas para converter isso em um crontab e atualizar crontab do sistema.

Se você não tem acesso a cron frequente (como se eu não fizer isso, já que estamos em Heroku), então DJ é o caminho a percorrer.

Você tem algumas opções.

  1. Do que você está fazendo. DJ vai repetir cada tarefa um certo número de vezes, então você tem alguma indulgência há

  2. Coloque o código que cria o trabalho DJ próxima em um bloco de assegurar, para ter certeza que é criado, mesmo depois de uma exceção ou outra má evento

  3. Criar outro DJ que executa periodicamente, verificações para se certificar de existir os DJs apropriadas, e cria-los se eles não o fazem. Claro, isso é tão propenso a erros como as outras opções, uma vez que o monitor eo DJ real são ambos rodando no mesmo env, mas é alguma coisa.

Outras dicas

Existe alguma razão específica para que você não iria usar o cron para este tipo de coisas? Ou talvez algo mais rubyish como rufus-scheduler, que é bastante fácil de usar e muito fiável.

Se você não precisa de fila, essas ferramentas são uma maneira de ir, eu acho.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top