我继承了一个部署在Tomcat中的Grails项目。我基本上必须对先前的工程师所做的工作进行逆向工程。
我的问题是Grails 如何在其中一个Grails环境中选择:
所以在Config.groovy中有:
environments
{
development
{
. . .
}
production
{
. . .
}
}
但是,在启动Tomcat时,部署的Tomcat服务器如何在“生产”中选择“开发”?我假设它将作为web.xml中的一些上下文或init参数,类似于
<code>
<init-param>
<param-name>grails.environment</param-name>
<param-value>production</param-value>
</init-param>
</code>
所有grails文档都假定您运行
grails war your-selected-environment
但没有设计准确记录战争文物如何受到影响。
答案 0 :(得分:9)
如果你跑
grails test war
例如,然后构建war以便仅使用“test”特定环境块中的代码。无需担心运行时环境中的任何内容。
缺点是你必须为每个环境建立一个单独的战争。
或者,您可以生成单个war,然后在tomcat启动中为每个环境设置一个环境变量,告诉grails选择哪些配置。您可以通过设置来完成此操作,例如
-Dgrails.env=test
答案 1 :(得分:4)
编辑tomcat环境文件。对于Tomcat 7:
/path/to/apache-tomcat-7.x.x/bin/setenv.sh
并将grails.env系统属性添加到命令行
CATALINA_OPTS='-Xms2048m -Xmx8192m -Dgrails.env=dev';
将dev替换为您想要的环境
答案 2 :(得分:0)
在构建战争时选择环境,而不是在tomcat启动时选择。当你运行
grails war
隐式选择production
环境,但您可以使用-Dgrails.env=development
在命令行上覆盖它。查看有关部署的手册部分:http://grails.org/doc/2.2.4/guide/single.html#deployingAnApplication
答案 3 :(得分:0)
所以你会说
grails> prod war
其中prod是环境名称。您可以拥有一个名为space的环境并执行
space war
我没有看到文档,你可以在部署后更改它。在我的WEB-INF文件夹(爆炸的WAR)中有一个application.properties文件
grails.env=development
grails.war.deployed=true
grails.buildScope=war
app.servlet.version=2.5
我怀疑这会起作用,但要检查一下。