詳細検索

O que fazer quando uma tarefa começa duas vezes em Capistrano 3

Avatar
por maeno
2 min de leitura

O que fazer quando uma tarefa começa duas vezes em Capistrano 3
Traduzido do 日本語 • Ver original

Quando executei a tarefa com um ambiente de estágio diferente no Capistrano3, caí no sintoma de que a tarefa foi lançada duas vezes. Como a tarefa é executada duas vezes, mesmo que eu configure a instância AWS para ser lançada como "duas", "quatro" ocorrerá, as consultas emitidas para o MySQL serão dobradas, e os registros a serem INSERIDOS serão inseridos duplicadamente. As configurações que foram temporárias gravadas no arquivo também foram sobrescrevidas pelas tarefas subsequentes que estavam rodando em dobro, e a implantação já estava em um estado bagunçado. Agora que consegui resolver o problema, vou deixar um memorando sobre o que fazer naquele momento.

O motivo era que o ambiente padrão de implantação estava especificado nas configurações de invocação.

Quando eu estava desenvolvendo uma tarefa de implantação em um ambiente de teste, escrevi as seguintes configurações no capfile.

Rake::Task[:d evelop].invoke
invocar :d evelop

Se você escrever isso, o ambiente padrão de implantação será fixado para 'develop', então ao executar o comando de deployment, deve especificar o ambiente de deployment (nome do estágio) e

Implantação de desenvolvimento de $task_name

Onde você faz assim,

Implantação do limite $: task_name

Era um pouco mais fácil omitir o ambiente de implantação, mas isso teve um impacto negativo ao implantar fora do ambiente padrão.

Desta vez, a implantação correu bem no ambiente de teste, então a próxima implantação foi feita no ambiente de produção, e o ambiente de implantação (nome do estágio) foi executado com 'production'. Como o conteúdo da implantação era exatamente o mesmo do ambiente de teste, não havia diferença nas configurações da tarefa de implantação, e as configurações de função e conexão SSH eram as mesmas, então copiei 'config/deploy/develop.rb' e criei 'config/deploy/production.rb'. Nesse estado, especifiquei o ambiente de implantação e executei a implantação conforme mostrado abaixo.

Implantação de produção de $Cap: task_name

Isso também iniciará a implantação no ambiente padrão omitido ao mesmo tempo. Na verdade,

Desenvolvimento de $task_name

É o mesmo que especificar dois ambientes e realizar uma implantação.

Para eliminar esse estado, basta excluir as configurações de invocação mencionadas acima. Em outras palavras, ao implantar em múltiplos ambientes, isso pode causar confusão, então é melhor não usar as configurações de invocação.

Não, fiquei viciado por algumas horas até finalmente resolver. Tenho que tomar cuidado no futuro.

Related Articles