gpt4 book ai didi

tomcat - tomcat 中没有设置 Grails 环境。 application.yml 文件不使用自定义环境设置

转载 作者:行者123 更新时间:2023-11-28 23:15:40 25 4
gpt4 key购买 nike

我有一个在本地运行并使用 grails -Dgrails.env=dev run-app 构建的 grails 应用程序.以下内容在我的开发和 qa tomcat 实例服务器中都是正确的。

grailsApplication.config.get('grails.env') == 'dev'

然后 grails 从 application.yml 中找到正确的配置通过 grailsApplication.config属性(property)。 (有关说明,请参阅下面的第一个更新)。

当我们的构建服务器构建 war文件使用 grails -Dgrails.env=dev war我在 META-INF 中收到了带有 build.info 的正确 war,其中正确的环境变量设置为 dev .然而,调用

grailsApplication.config.get('grails.env') == '{"initializing":"true"}'

根据 grails.util.Environment类:

/**
* Whether Grails is in the middle of bootstrapping or not
*/
public static final String INITIALIZING = "grails.env.initializing";

我尝试使用较短的 grails <env> war 设置变量语法以及将其放在 GRAILS_OPTS 中变量无济于事。但是我相信只要它最终出现在 META-INF/grails.build.info 中。理论上无论如何它都应该有效(参见 grails.util.Environment.resolveCurrentEnvironment() 方法)。

据我所知,这里的区别在于 tomcat,但我无法告诉您为什么它在初始化时卡住。除了这种方法之外,我没有任何其他重要的方法可以设置环境变量,AFAIK 是这样做的标准方法。

有什么想法吗?

附言我正在通过注入(inject) grailsApplication 的临时 Controller 访问此属性进入它并返回它在 grailsApplication.config 中找到的任何映射对于您提供的 key 。

更新:

我设法使用 Environment.current.name 找到了正确的环境,所以如果需要的话,我目前有一个解决方法,但是我的 application.yml 中存在的自定义属性仍然没有被拾起。

例如

# application.yml
app.my-prop: false

environments:
dev:
app:
my-prop: true

grailsApplication.config.getProperty('app.my-prop', boolean, false) 返回 true当我用 grails -Dgrails.env=dev run-app 运行它时在我的本地但是false在带有 grails -Dgrails.env=dev war 的服务器上可部署。

最佳答案

在解析配置之前调用 Environment.getCurrent()

现在可以了。我不是 100% 确定为什么,但我有一个理论:

我只想将 Controller 限制在开发环境中,我记得我的一位同事使用方法 GrailsUtil.isDevelopmentEnv() 来检查它,因此作为预防措施,我添加了一个 在呈现配置值响应之前检查环境的 if 语句。

if (GrailsUtil.isDevelopmentEnv() || System.getProperty(Environment.KEY) == 'dev') { 
...
}

但是一旦我添加了检查,自定义 application.yml 属性就正确解析了!

我目前的理论是 GrailsUtil.isDevelopmentEnv()Environment.getCurrent() 方法检查系统属性,如果没有找到,检查META-INF/grails.build.info 文件并缓存结果。也许问题是当 grailsApplication.config.getProperty() 被调用时,环境设置是通过这种方式解决的,但它不是通过这种方法初始化的。

我正在使用 grails 版本 3.1.16,这可能会在以后的版本中得到修复,但目前我对这个解决方案很满意。

关于tomcat - tomcat 中没有设置 Grails 环境。 application.yml 文件不使用自定义环境设置,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49991085/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com