atrasado_job - Executa código desatualizado?
-
21-09-2019 - |
Pergunta
Estou usando o atrasado_job (tentei tanto o tobi quanto o coletivo_idea) na hospedagem compartilhada site5.com, com passageiro como ambiente rails.Consegui fazer os trabalhos.No entanto, parece que o plug-in ignora quaisquer alterações no código-fonte da classe de trabalho após a primeira execução.Eu reiniciei o servidor a cada alteração (touch tmp/restart.txt
), mas ainda o ignora.
Exemplo:
arquivo: lib/xx_job.rb
class XxJob
def perform
Rails.logger.info "XX START"
TempTest.delete_all
i = 0
10.times {
i+=1
TempTest.create(:name => "XXX")
sleep(1)
}
Rails.logger.info "XX END"
end
end
Em um controlador simples eu chamo:
Delayed::Job.enqueue(XxJob.new)
Conclusões que reuni:
- Se eu mudar xx_job.rb para xx_job1.rb - erro no controlador
- Se eu mudar a classe XxJob para classe XxJob1 - erro no controlador
- Se eu excluir todo o conteúdo do método perform - o código antigo, o código antigo será executado
- Novo arquivo .rb com classe e performance, enfileire esta classe - funciona perfeitamente
- Se eu mudar alguma coisa no trabalho de execução e execução do novo arquivo novamente - o código antigo será executado
Entre cada alteração eu reiniciei o servidor.Parece que o Passenger ou outra coisa salva o cache da classe.
Como posso excluir esse cache?Está armazenado em algum lugar no servidor?(Espero ter acesso a ele na hospedagem compartilhada)
Obrigado!
Solução 2
Eventualmente, eu descobri isso - vários trabalhadores estavam em segundo plano, cada um deles pegou um emprego e tinha seu próprio cache. Eu não sabia como matá -los, então mudei o nome da mesa por vários segundos. Isso os matou :)
Então eu usei https://github.com/tobi/delayed_job/wiki/running-delayed::worker-as-a-daemon Quando o trabalhador começa, e funciona muito bem.
Outras dicas
Se você executar trabalhos de trabalho atrasados daemonizados, será necessário reiniciá-los para recarregar o código.Além disso, lembre-se de que cada trabalhador carrega sua própria instância de Rails.