应用程序启动期间Grails合并配置疑难解答

时间:2014-08-21 18:26:21

标签: grails deployment groovy configuration diagnostics

假设我有一个名为myCoolApp的Grails应用程序。

此外,假设我在grails-app/conf/Config.groovygrails-app/conf/DataSource.groovy个人资料下的testproduction中定义了一些基本属性。

Config.groovy设置为与以下.groovy外部配置文件合并,如果找到则

grails.config.locations = ["file:${userHome}/.grails/${appName}-config.groovy"]

最后,我还在外部测试服务器中定义了这样一个文件,在本地* NIX用户路径下:

/home/appServerTestUser/.grails/myCoolApp-config.groovy

可悲的是,我发现由于某种原因,当Tomcat实例启动时,外部.groovy文件的属性没有被合并。

  • 我有什么选择让Grails告诉我:"哦,是的,我找到了你的外部配置文件:/home/appServerTestUser/.grails/myCoolApp-config.groovy"这些是我合并到Config.groovy
  • 的属性

谢谢!

1 个答案:

答案 0 :(得分:2)

基于文件的路径在部署的应用中没有多大意义。它可以在您的开发机器上进行部署以进行测试时使用,但可能会在任何其他计算机上失败。即使配置了正确的路径,它也可能在本地失败,因为该过程将像另一个低权限用户一样运行。

您可以使用绝对路径,例如/etc/myapp/path/to/file,但这往往会将部署与文件系统结构相结合,因此如果您在Windows中开发并在Linux上部署,那么让它们都能正常工作会很棘手。

因此,Tomcat部署的最佳选择是使用类路径语法。您可以指定多个文件,它将加载它找到的所有文件,因此我通常有一个用于本地开发的条目和一个用于已部署的应用程序:

grails.config.locations = [
   "classpath:${appName}-config.groovy",
   "file:./${appName}-config.groovy"
]

我删除.properties文件的条目,因为Groovy语法更灵活,但如果你愿意,可以使用它们。我还将dev文件保存在项目根目录中(并从源代码控制中排除)。

因此,在部署时,请正确命名文件(不同的应用程序将具有不同的文件,因此不会发生冲突)并将它们放在Tomcat的lib目录中。这是在类路径中,因此classpath:条目将会看到它。