Como enfileirar melhor um job de longa duração

Então, tenho um plugin que inicia o Ansible para realizar uma instalação do Discourse (eu realmente, realmente quero parar de usar o WordPress para gerenciar pedidos de instalação!).

Inicialmente, eu estava chamando fork para iniciá-lo, o que funcionou bem nos testes, mas pensei que deveria fazer isso de uma forma mais “Discourse Way”.

Então, criei um trabalho único para executar o processo, mas ele é encerrado da seguinte forma:

E, [2020-12-16T12:53:39.662683 #3158277] ERROR -- : worker=0 PID:3158425 timeout (61s > 60s), killing

Tentei adicionar sidekiq_options queue: 'low' à classe e, em seguida, à função que executa o trabalho.

Depois, pulei a etapa de fazer o trabalho executar o processo e simplesmente o executei diretamente no modelo com:

         Discourse::Utils.execute_command(*instructions)

Funciona perfeitamente se eu executá-lo a partir do rails c, mas, independentemente de como eu o execute (este é um ambiente de desenvolvimento Ubuntu, iniciado com ./bin/unicorn), ele é encerrado.

Trabalhos únicos são aqueles que serão executados apenas uma vez. Parece que o que você precisa é de um trabalho regular que será agendado por um gatilho, como uma requisição atingindo um controlador.

Trabalhos regulares podem durar mais de 60 segundos, como alguns fazem no uso normal.

Bem, eu mudei para um trabalho regular e tentei executar com ./bin/rails s em vez de ./bin/unicorn, e ainda sem sucesso.

Isso não faz sentido, porque sei que muitos desses trabalhos levam mais de um minuto.

Como exatamente você está executando a tarefa? Você pode colar a parte relevante do código Ruby?

Pode apostar!

https://github.com/pfaffman/discourse-pfaffmanager/blob/master/app/jobs/regular/create_droplet.rb

https://github.com/pfaffman/discourse-pfaffmanager/blob/master/app/models/pfaffmanager/server.rb#L150-L172

Por que você está usando

Jobs::CreateDroplet.new.execute(server_id: id)

em vez de

Jobs.enqueue(:create_droplet, server_id: id)

em https://github.com/pfaffman/discourse-pfaffmanager/blob/49f7369b1dc0b1c8f63065b14c92ac7ecc3ab2b3/app/models/pfaffmanager/server.rb#L146?

E é por isso que preciso fazer perguntas! É porque sou apenas um homem das cavernas. (Sem intenção de ofender ninguém que viva em uma caverna.)

Claro, não há nenhuma razão. Eu simplesmente não consegui entender como era para eu chamá-lo!

Muito obrigado!

… e ainda está rodando! …

Muito obrigado. Isso levou pelo menos algumas horas…

Próximo passo: executá-lo em um servidor de produção real…