【问题标题】:How to deploy the same Grails application twice in Tomcat?如何在 Tomcat 中两次部署相同的 Grails 应用程序?
【发布时间】:2012-07-09 11:19:38
【问题描述】:

如果我在 Tomcat 中两次部署相同的 Grails 应用程序(即 myApplication_first.war、myApplication_second.war),Tomcat 无法部署 WAR 文件,可重现。 它抱怨类 XYZ 已经存在于 TEMP 文件夹中(这是真的,由于以前的部署)。 因此,更改全局 Tomcat TEMP 文件夹没有任何意义,因为两个项目无论如何都会再次使用同一个文件夹。

我通常知道如何部署应用程序两次,但不是在 Grails 上下文中,因为它已经自己管理了很多东西。

有没有办法实现这个计划?

我们使用 Grails 1.3.7 版。

我搜索了很多可能的解决方案,但没有一个适合我的需求。

我想到但对我来说仍然有点奇怪的一种方法是,在部署期间动态更改所有类的包(使用 ANT 或类似的东西)。这样它们就不会在Tomcat TEMP 文件夹中发生碰撞。 这可能是一个潜在的解决方案吗? 是否有可能以一种优雅的方式实现?

亲切的问候, 克里斯托弗

【问题讨论】:

    标签: tomcat grails deployment war


    【解决方案1】:

    我有类似的情况,我的解决方案是将应用程序“转换”为 grails 插件,然后创建更多(我有 6 个)应用程序,这些应用程序使用了这个插件,并且在每个应用程序中我都调整了配置(DataSource 等)。即使最终 WAR 文件几乎 100% 相同,它也能正常工作。

    您是否也尝试过 TomCat 虚拟主机?

    【讨论】:

    • 您好汤姆,感谢您的回复。让我直截了当地说:您将大部分代码都移到了一个单独的插件中,并且该插件被您所有其他(尽管相似)项目所包含? Tomcat vhost:这会不会太晚了一层?
    • 第一部分:是的,正确,我将所有代码移到插件中,然后在安装了此插件的情况下创建单独的应用程序,不同的只是 dabatase 配置(它是一个 CMS 应用程序......很清楚 ;-) ) 第二部分:嗯,您可以同时使用 Apache 和 TomCat 虚拟主机,如果您愿意,这不是技术问题。但是对于 TomCat 中的虚拟主机,在将代码移入插件之前,我想知道这是否有助于解决您的问题。
    【解决方案2】:

    我已经能够毫无问题地将两个几乎相同的 grails 1.3.7 应用程序部署到同一个 tomcat 7 实例上。第二个应用程序基本上是第一个应用程序的克隆,只是对一些源文件进行了一些小改动。每个应用程序都有不同的 WAR 名称(看起来您已经在这样做了),并且我还确保 Config.groovy 中的 grails.app.context 对于每个应用程序都是不同的。我相信tomcat在一些早期版本的WAR文件名中存在下划线问题,但我不知道最新版本是否仍然如此。尝试使用不带下划线的不同 WAR 名称,并编辑 grails.app.context 以匹配。

    【讨论】:

    • 谢谢。我将尝试重命名 WAR 并更改上下文。也许我也可以尝试使用 Tomcat 7 进行测试。
    【解决方案3】:

    查看tomcat manager application。它有一个重新加载选项,可能会解决您的问题。

    一些公司禁用了管理器(tomcat 发行版附带的附加 web 应用程序)。我理解安全问题,但这可以解决,经理肯定会简化应用程序部署。

    【讨论】:

    • 经理不会帮助我们,因为我们通过 Hudson/Jenkins 使用自动部署。不过还是谢谢。
    猜你喜欢
    • 2013-05-18
    • 1970-01-01
    • 1970-01-01
    • 2017-02-27
    • 1970-01-01
    • 2016-09-07
    • 2013-11-03
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多