Grails 2.4 不会从 /opt 读取配置文件

Grails 2.4 won't read config file from /opt

请注意:虽然我使用的是 Grails Shiro plugin,但我认为这是一个核心 Grails 问题,与插件无关。


Mac (Yosemtie) 和 Grails 2.4.5 在这里。这是我 Config.groovy:

的前两行
String configFileAbsPath = System.getProperty('configFileAbsPath')
grails.config.locations = [ "file:${configFileAbsPath}" ]

所以在本地 运行 我会做类似的事情:

grails -DconfigFileAbsPath=/Users/myuser/tmp/myapp.properties run-app

当我 运行 这个确切的调用时,我的应用程序启动并且运行良好。

但是,在非本地环境中,我希望我的配置文件位于 /opt/myapp/myapp.properties 下。所以在我的本地机器上我创建了一个 /opt/myapp 目录,然后是 运行 chmod -R 777 /opt/myapp。然后我将 myapp.properties 复制到它和 运行:

grails -DconfigFileAbsPath=/opt/myapp/myapp.properties run-app

这会产生以下堆栈跟踪:

| Error Error generating web.xml file (NOTE: Stack trace has been filtered. Use --verbose to see entire trace.)
groovy.lang.MissingPropertyException: No such property: shiro for class: java.lang.String
    at ShiroGrailsPlugin$_closure4_closure30_closure34.doCall(ShiroGrailsPlugin.groovy:248)
    at ShiroGrailsPlugin$_closure4_closure30_closure34.doCall(ShiroGrailsPlugin.groovy)
    at ShiroGrailsPlugin$_closure4_closure30.doCall(ShiroGrailsPlugin.groovy:243)
    at ShiroGrailsPlugin$_closure4_closure30.doCall(ShiroGrailsPlugin.groovy)
    at ShiroGrailsPlugin$_closure4.doCall(ShiroGrailsPlugin.groovy:242)

我严重怀疑外部配置文件的位置或在配置文件(或其父目录)上设置的文件权限会破坏 Grails Shiro 插件。 我认为这只是一个误导性的 Grails/Groovy 异常。很可能是某种安全异常导致某些东西无法 load/populate 正确(并且无声地失败),然后当 Grails Shiro 在 run-app 期间启动时,它丢失了一些应该存在的东西并导致 run-app去死。

关于正在发生的事情或修复方法有什么想法吗?


更新: 运行 grails clean, grails clean-all and/or grails refresh-dependencies 在调用 grails run-app 也不要 help/solve 这个错误。

我通常更喜欢将 .groovy 文件用于外部配置而不是 .properties,因为我可以将 printlns 写入其中以检查文件是否已加载。