5

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

4

5 回答 5

8

mod_proxy_balancer您可以设置两个 tomcat 实例,前面有一个 Apache ,如此所述。对于应用程序的重新部署,可能会应用“滚动升级”策略(假设 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

你完成了。您不需要多个物理机或虚拟机来执行此操作 - 也可以在单个机器上进行。如果您的应用程序升级意味着数据库更改,请小心。上面的内容可能被封装在一个gant 脚本中,因此一个简单的“grails cluster-redeploy”可以满足您的所有需求。这样的脚本目前在我的清单上,但我不知道什么时候会完成。

于 2009-11-03T09:09:43.180 回答
4

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

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

只需使用文档中描述的版本号命名战争文件:

  • foo##42.war
  • foo##43.war
于 2012-05-15T14:52:16.080 回答
2

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

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

于 2009-11-02T21:49:48.427 回答
1

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

于 2009-11-02T21:39:49.123 回答
0

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

于 2009-11-02T21:21:30.750 回答