1

我想根据 和 的短名称自动命名我的appNameWARappVersion文件Environment.current。我有以下选项设置BuildConfig.groovy

String currentEnvShortName = Environment.envNameMappings.find{it.value == Environment.current.name}.key

def f = new File("grails-app/conf/config.properties")
f.text = ""
f << "Current Env: ${currentEnvShortName}"

grails.project.war.file = "target/war/${appName}-${appVersion.toString().replaceAll(/\./,' ').split().join("-")}${currentEnvShortName}.war"

我将环境写入文件,这样我就不必等待war命令执行。编辑:使用 GGTS 命令行。首先,我认为一切都按预期进行。我平时的部署流程如下:

  1. grails clean
  2. 运行war所需环境的命令
  3. 在应用服务器上部署 WAR

然而,在 clean 之后,也可能在其他 grails 命令之后,值Environment.current以我不理解的方式发生变化。我总是dev第一次运行war命令。第一次之后,环境名称会再次正确检索。所以我做的解决方法是:

  1. grails clean
  2. war为所需环境运行命令,但在启动后立即中断
  3. 运行war所需环境的命令
  4. 在应用服务器上部署 WAR

我做错了什么还是这是一个错误?

重现环境:

GGTS 3.6.4 发布

圣杯 2.4.2

Groovy 2.3.10

JDK 1.6.0_07

编辑:我无法从常规命令行使用 Grails 重现。此行为仅发生在 Groovy Grails Tool Suite 的内置命令行中。环境似乎在随机切换。

编辑 2:操作系统:Windows 7

4

2 回答 2

1

好吧,我多次尝试了您的场景,但无法重现。但是,如果由于某种原因它不适合您,您可以使用另一种方法,如下所示:

修改您的代码BuildConfig.groovy

// Define a custom mapping so that you can easily extend for custom environments (which will not be possible via "Environment.current.envNameMappings"
Map envNameMappings = [test: "test", development: "dev", production: "prod"]

// Read the currrent environment from System property
String currentEnv = System.getProperty("grails.env")

println currentEnv
// And this is the short name of environment you want
println envNameMappings[currentEnv]
于 2015-11-21T11:27:10.120 回答
0

该问题仅发生在 Windows 上 Groovy Grails Tool Suite 的内置命令行中。如果war从 Windows CMD 执行命令,则环境使用正确。

但是,当从 Windows CMD 执行时,编码对我来说会中断。我已经在另一个问题中解决了这个具体问题

于 2016-01-19T10:38:20.697 回答