grails.util.Environment,定义了许多预配置的环境
运行Grails命令时,可以使用-Denv
标志指定要使用的环境,例如grails run-app -Denv=test
。您还可以使用闭包指定特定于某个环境的代码块,例如:
environments {
production {
grails.serverURL = "http://www.changeme.com"
}
development {
grails.serverURL = "http://localhost:8080/${appName}"
}
test {
grails.serverURL = "http://localhost:8080/${appName}"
}
}
这些特定于环境的闭包可以在Bootstrap.groovy
和Config.groovy
中使用,还有其他地方吗?
另外,我是否可以定义自己的环境,例如PRE_PRODUCTION
,以便它可以使用上面的闭包和-Denv
标志?
最后,CUSTOM
环境是否可以与-Denv
标志一起使用?
答案 0 :(得分:17)
这些特定于环境的闭包 可以在Bootstrap.groovy中使用 Config.groovy,还有其他地方吗?
我不这么认为......对于其他地方,你需要使用Generic Per Environment Execution块
Environment.executeForCurrentEnvironment {
production {
// do something in production
}
development {
// do something only in development
}
pre_production {
// do something for your custom environment
}
}
另外,我可以定义 我自己的环境,例如 PRE_PRODUCTION,以便它可以工作 上面的闭包和-Denv 标志?
是的,您应该能够声明-Dgrails.env=pre_production
并将pre_production
块包含在Bootstrap.groovy或Config.groovy(或上面的自定义grails.util.Environment
块中)
修改强>
正如您在Grails source for Environment中看到的那样,这种自定义环境将枚举到Environment.CUSTOM,然后在Environment.executeForCurrentEnvironment
块中,check against CUSTOM, and the name of the custom environment
答案 1 :(得分:4)
如果您创建自定义环境,则可以在使用environments {}
块的任何位置使用它。例如,除了Bootstrap.groovy
和Config.groovy
之外,您还可以在DataSource.groovy
中使用它,甚至可以在Searchable.groovy
等其他配置文件中使用它。
另外,我相信
Environment.currentEnvironment.name
将在您的案例中返回'pre_production'
。
答案 2 :(得分:1)
-Dgrails.env = pre_production