我的主配置中包含以下内容:
grails.config.locations = [“file:grails-app / config / Jawr.groovy”]。
使用grails run-app运行应用程序时,一切正常。
但是,在部署(创建war存档)时,这不再起作用,因为文件系统上不再保留文件“Jawr.groovy”(它应该只在战争中)。
你有解决方案吗?你是否将外部文件包含在grails主配置文件中?
感谢。
答案 0 :(得分:1)
好的,这里有一些事情。
首先,因为您的配置路径上没有前导斜杠,这是一个相对于谁知道位置的路径。我在Tomcat中使用了这个,并且该路径最终与启动Tomcat服务器时的工作目录相关。如果启动Tomcat,关闭它,更改目录,然后再次启动它,您将获得两个不同的配置路径。
其次,grails-app目录仅存在于Grails项目的源树中。解压缩的WAR文件的结构更像是Grails源代码树的web-app文件夹,包含WEB-INF,META-INF,js,images等文件夹。
第三,您可能希望避免将外部化配置文件放在webapp的文件夹中。下次部署应用程序时,将使用旧版本的应用程序删除该配置。外部化配置的一个要点是,您无需重新配置即可重新部署。
一个简单但不太理想的解决方案是使用静态的完全限定路径,如/etc/yourApp/conf.groovy
,然后将其放在文档中。还有一个插件可以处理这个问题。
http://www.grails.org/plugin/external-config
我没有使用它,但描述使它听起来像是明智的事情。
答案 1 :(得分:0)
然后我把它放进/共享,然后 修改:
//Config.groovy grails.config.locations = ["file:shared/TZLibConfig.groovy"] //BuildConfig.groovy grails.war.resources = { stagingDir, args -> copy(todir: "${stagingDir}/WEB-INF/shared"){ fileset(dir:"shared",includes:"**") } }
答案 2 :(得分:0)
在我的工作中,我们的团队经常使用系统属性来保存配置文件的路径(通常在运行应用程序的用户的主文件夹中 - 出于特权的缘故)。然后我们手动将配置文件复制到该路径
为了确定它是生产环境,我们在Config.groovy中使用以下代码:
if (System.properties["${appName}.config.location"]) {
grails.config.locations = ["file:" + System.properties["${appName}.config.location"]]
}
答案 3 :(得分:0)
This article建议允许用户将配置文件的位置指定为环境变量或java属性 - 这意味着您只需在命令行中使用-D
指定它。除了所有其他方法之外,还可以使用它。