我在我的主要配置是这样的:Grails的配置:包括其他配置文件
grails.config.locations = “文件:在grails-app /配置/ Jawr.groovy”。
使用grails run-app运行应用程序时,一切正常。
但是,在部署(创建战争档案)时,这不再起作用,因为文件“Jawr.groovy”不再保留在文件系统上(它应该只在战争中)。
你有解决方案吗?你是否将外部文件包含在grails主配置文件中?
谢谢。
我在我的主要配置是这样的:Grails的配置:包括其他配置文件
grails.config.locations = “文件:在grails-app /配置/ Jawr.groovy”。
使用grails run-app运行应用程序时,一切正常。
但是,在部署(创建战争档案)时,这不再起作用,因为文件“Jawr.groovy”不再保留在文件系统上(它应该只在战争中)。
你有解决方案吗?你是否将外部文件包含在grails主配置文件中?
谢谢。
然后我把它改成/共享,并 修改:
//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:"**") } }
在我的工作,我们的团队经常使用的系统属性,保存路径到配置文件(通常在运行应用程序的用户的主文件夹 - 为了权限)。这里
if (System.properties["${appName}.config.location"]) {
grails.config.locations = ["file:" + System.properties["${appName}.config.location"]]
}
好吧,几件事:那我们手动的配置文件复制到该路径
要确定它的生产环境中,我们使用下面的代码Config.groovy中。
首先,因为您的配置路径中没有前导斜杠,所以这是相对于谁知道在哪里的路径。我在Tomcat中使用了这个功能,并且这个路径最终与启动Tomcat服务器时所在的工作目录相关。如果启动Tomcat,关闭它,更改目录,然后重新启动它,您将获得两个不同的配置路径。
其次,grails-app目录只存在于Grails项目的源代码树中。解压后的WAR文件的结构更像是Grails源代码树的Web应用程序文件夹,具有WEB-INF,META-INF,js,图像等文件夹。
第三,您可能希望避免将您的webapp文件夹内的外部化配置文件。下次您部署应用程序时,该配置将被旧版本的应用程序清除。外部化配置的一个要点是,您可以重新部署而不必重新配置。
一个简单但并不理想的解决方案是使用静态的完全限定路径,如/etc/yourApp/conf.groovy
,然后将其放入文档中。还有一个插件可以处理这个问题。
http://www.grails.org/plugin/external-config
我还没有使用它,但描述使它听起来像它明智的事情。
该插件已弃用:它在安装过程中显示警告,即使我认为应该将此功能内置到Grails本身中。但是,您可以轻松地自己做同样的事情;见http://phatness.com/2010/03/how-to-externalize-your-grails-configuration/ – osa
This article建议允许用户指定配置文件的位置作为环境变量或java属性---这意味着您可以简单地在命令行中指定它为-D
。除了所有其他方法之外,还可以使用它。
你是什么意思,它不起作用?当grails读入外部配置时,它将它合并到一个配置类中。所以它不需要存在于WAR中。 – Gregg