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.