4

我继承了一个部署在 Tomcat 中的 Grails 项目。我基本上必须对以前工程师所做的事情进行逆向工程。

我的问题是 Grails 如何在其中一种 Grails 环境中进行选择:

所以在 Config.groovy 中有:

environments
{
    development 
    {
        .  . . 
    }
    production
    {
       . . .
    }    

}

但是,在启动 Tomcat 时,如何在部署的 Tomcat 服务器中说“开发”而不是“生产”?我假设它是 web.xml 中的一些上下文或初始化参数,类似于

<code>
    <init-param>
        <param-name>grails.environment</param-name>
        <param-value>production</param-value>
    </init-param>
</code>

所有 grails 文档都假定您运行

grails war your-selected-environment

但并没有设计来准确记录战争文物是如何受到影响的。

4

4 回答 4

10

如果你跑

grails test war

例如,然后构建战争,因此它将使用“测试”特定环境块中的代码。无需担心运行时环境中的任何事情。

缺点是您必须为每个环境构建单独的战争。

或者,您可以只生成一个战争,然后在 tomcat 启动中为每个环境设置一个环境变量,告诉 grails 选择什么配置。您可以通过设置来做到这一点,例如

-Dgrails.env=test
于 2013-09-19T15:19:08.460 回答
5

编辑您的 tomcat 环境文件。对于 Tomcat 7:

/path/to/apache-tomcat-7.x.x/bin/setenv.sh

并将 grails.env 系统属性添加到命令行

CATALINA_OPTS='-Xms2048m -Xmx8192m -Dgrails.env=dev'; 用你想要的环境替换 dev

于 2016-09-20T15:04:02.163 回答
0

构建战争时选择环境,而不是tomcat启动时。当你跑

grails war

环境是隐式选择的production,但您可以在命令行上使用-Dgrails.env=development. 查看有关部署的手册部分:http: //grails.org/doc/2.2.4/guide/single.html#deployingAnApplication

于 2013-09-19T15:09:26.233 回答
0

所以你会说

    grails> prod war

其中 prod 是环境名称。你可以有一个叫做空间的环境,然后做

    space war

我还没有看到在部署后您可以更改它的文档。在我的 WEB-INF 文件夹(分解的 WAR)中有一个 application.properties 文件

grails.env=development
grails.war.deployed=true
grails.buildScope=war
app.servlet.version=2.5

我怀疑这是否可行,但请检查一下。

于 2013-09-19T15:34:30.390 回答