【发布时间】:2010-12-12 10:26:09
【问题描述】:
嘿,我是 Grails 的新手,我想知道如何部署。将 .war 部署到生产环境后,如何在不停机的情况下更新应用程序?
【问题讨论】:
嘿,我是 Grails 的新手,我想知道如何部署。将 .war 部署到生产环境后,如何在不停机的情况下更新应用程序?
【问题讨论】:
您可以设置两个 tomcat 实例,前面有一个 Apache mod_proxy_balancer,如 here 所述。对于应用程序的重新部署,可能会应用“滚动升级”策略(假设 app1 和 app2 是您的两个 tomcat 实例):
你就完成了。您不需要多个物理机或虚拟机来执行此操作 - 也可以在单个机器上进行。如果您的应用程序升级意味着数据库更改,请小心。 以上内容可能被封装,例如在gant script 中,所以一个简单的“grails cluster-redeploy”可以满足您的一切需求。这样的脚本目前在我的列表中,但我不知道什么时候会完成。
【讨论】:
如果您使用的是 Tomcat,则可以使用所谓的并行部署:
http://tomcat.apache.org/tomcat-7.0-doc/config/context.html#Parallel_deployment
只需使用文档中描述的版本号命名战争文件:
【讨论】:
即使您热部署 WAR 文件(通过不重新启动服务器),在重新加载上下文时仍然会有一些停机时间。这不是 Grails 本身的东西,更像是 J2EE/servlet 的东西。
正如dogbert所说,最好放一个维护页面(在Tomcat前面使用Apache是个好主意)并关闭应用服务器,上传新的WAR然后重新启动服务器。
【讨论】:
一旦您的应用被打包为 WAR,对源文件的更改就不会像使用 run-app 那样自动传播。总的来说,我认为特别是对于具有一直有效运行的代码的编译代码,执行实时更新有点冒险。您可以在开发过程中应对奇怪的部署故障,但在生产中我宁愿安全行事并忍受一点停机时间。
【讨论】:
我所知道的是,您可以更改 groovy 文件或 .gsp 文件,保存更改后可以在浏览器中使用,但如果还有其他类型的文件,我不确定此功能。
【讨论】: