是否可以在不停止应用程序的情况下部署新的.war应用程序?

时间:2009-11-02 21:17:39

标签: tomcat grails war

嘿,我是Grails的新手,我想知道部署。将.war部署到生产环境后,如何在不停机的情况下更新应用程序?

5 个答案:

答案 0 :(得分:7)

如前所述here,您可以在其前面设置两个带有Apache mod_proxy_balancer的tomcat实例。对于应用程序的重新部署,可能会应用“滚动升级”策略(假设app1和app2是您的两个tomcat实例):

  1. 在Apache的balancer-manager中禁用tomcat @ app1
  2. 将应用程序重新部署到tomcat @ app1
  3. 使用app1进行一些测试,看看是否一切正常
  4. 在balancer-manager中启用tomcat @ app1
  5. 在balancer-manager中禁用tomcat @ app2
  6. 将应用程序重新部署到tomcat @ app2
  7. 在balancer-manager中启用tomcat @ app2
  8. 你已经完成了。您不需要多台物理或虚拟机器 - 它也可以在一个盒子上使用。如果应用程序升级意味着数据库更改,请小心。 以上可能被封装,例如在gant script中,所以一个简单的“grails cluster-redeploy”就可以完成你需要的一切。这样的脚本目前在我的列表中,但我不知道何时完成。

答案 1 :(得分:4)

如果您正在使用Tomcat,则可以使用所谓的并行部署:

http://tomcat.apache.org/tomcat-7.0-doc/config/context.html#Parallel_deployment

只需使用doc:

中所述的版本号命名war文件
  • FOO ## 42.war
  • FOO ## 43.war

答案 2 :(得分:2)

即使您热部署WAR文件(通过不重新启动服务器),在上下文重新加载时仍会有一些停机时间。这不是Grails的东西,更像是J2EE / servlet的东西。

正如dogbert所说,最好建立一个维护页面(在Tomcat前面使用Apache是​​一个好主意)并关闭应用服务器,上传新的WAR然后再次启动服务器。

答案 3 :(得分:1)

将您的应用程序打包为WAR后,对源文件的更改将不会像使用run-app一样自动传播。总的来说,我认为特别是对于编码代码一直有效的代码,执行实时更新有点冒险。你可以在开发过程中应对奇怪的部署故障,但在生产中我宁愿玩它安全,并且需要一点停机时间。

答案 4 :(得分:0)

我所知道的是你可以更改一个groovy文件或.gsp文件,保存更改后可以在浏览器中使用,但是如果有其他类型的文件,我不完全确定这个功能。