É possível implantar um novo aplicativo .war sem parar o aplicativo?
Pergunta
Ei, eu sou novo para Grails, e eu estou querendo saber sobre a implantação. Uma vez que um .war é implantado em produção, como posso atualizar o aplicativo, sem tempo de inatividade?
Solução
Mesmo se você implantar quente o arquivo WAR (por não reiniciar o servidor) ainda haverá algum tempo de inatividade enquanto recarrega contexto. Esta não é uma coisa Grails como tal, mais uma coisa J2EE / servlet.
Como dogbert disse, melhor para colocar uma página de manutenção (usando Apache na frente do Tomcat é uma boa idéia) e desligar o servidor aplicativo, fazer o upload do novo WAR, em seguida, iniciar o servidor novamente.
Outras dicas
Você pode configurar dois tomcat instâncias com um mod_proxy_balancer
Apache na frente dele, conforme descrito aqui . Para uma reafectação da aplicação de uma estratégia de "atualização sem interrupção" pode ser aplicado (assumindo app1 e app2 são os seus dois tomcat casos):
- Desativar tomcat @ app1 no balanceador-manager do Apache
- Reimplantar aplicativo para tomcat @ app1
- Faça alguns testes com app1 e ver se tudo funciona
- Ativar tomcat @ app1 no balanceador-manager
- Desativar tomcat @ app2 no balanceador-manager
- Reimplantar aplicativo para tomcat @ app2
- Ativar tomcat @ app2 no balanceador-manager
E você está feito. Você não precisa de várias máquinas físicas ou virtuais para fazê-lo - também é possível em uma única caixa. Se o seu upgrade aplicação implica alterações de banco de dados, tenha cuidado. A descrição acima pode ser encapsulado, por exemplo, em uma href="http://grails.org/doc/1.2.x/guide/4.%20The%20Command%20Line.html#4.1%20Creating%20Gant%20Scripts" rel="noreferrer"> roteiro , então um simples "grails cluster de redeploy" faz tudo o que você precisa. Esse script está atualmente na minha lista, mas não tenho idéia de quando isso será terminado.
Se você estiver usando Tomcat, é possível, com o que é chamado Parallel Implantação:
http://tomcat.apache.org/tomcat- 7.0-doc / config / Context.html # Parallel_deployment
Simplesmente nomear os arquivos de guerra com o número da versão, conforme descrito no doc:
- foo ## 42.war
- foo ## 43.war
Uma vez que o aplicativo é empacotado como uma guerra, alterações nos arquivos de origem não será propagada automaticamente como você se usando run-app. Em geral, eu acho que especialmente para código compilado com o código que é efetivamente ao vivo o tempo todo, é um pouco arriscado para realizar atualizações ao vivo. Você pode lidar com a falha implantação estranho durante o desenvolvimento, mas na produção Eu prefiro jogar pelo seguro e viver com um pouco de tempo de inatividade.
Tudo o que sei é que você pode alterar um arquivo Groovy ou um .gsp e depois de salvar as alterações estão disponíveis no navegador, mas se existem outros tipos de arquivos que eu não sou exatamente certo desse recurso.