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 写入其中以检查文件是否已加载。
请注意:虽然我使用的是 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 写入其中以检查文件是否已加载。