【问题标题】:Is it possible to deploy a new .war application without stopping the application?是否可以在不停止应用程序的情况下部署新的 .war 应用程序?
【发布时间】:2010-12-12 10:26:09
【问题描述】:

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

【问题讨论】:

    标签: tomcat grails war


    【解决方案1】:

    您可以设置两个 tomcat 实例,前面有一个 Apache mod_proxy_balancer,如 here 所述。对于应用程序的重新部署,可能会应用“滚动升级”策略(假设 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 script 中,所以一个简单的“grails cluster-redeploy”可以满足您的一切需求。这样的脚本目前在我的列表中,但我不知道什么时候会完成。

    【讨论】:

      【解决方案2】:

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

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

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

      • foo##42.war
      • foo##43.war

      【讨论】:

        【解决方案3】:

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

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

        【讨论】:

        • 是的,这似乎绝对是要走的路。谢谢。
        【解决方案4】:

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

        【讨论】:

          【解决方案5】:

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

          【讨论】:

            猜你喜欢
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 2019-05-01
            • 1970-01-01
            • 1970-01-01
            • 2021-07-09
            • 1970-01-01
            相关资源
            最近更新 更多