请注意:虽然我使用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例外。很可能某种安全异常导致某些内容无法正确加载/填充(并且无声地失败),然后当Grails Shiro在run-app
期间启动时,它丢失的东西应该存在并导致{{1}死了。
有关正在发生的事情或修复内容的任何想法?
更新:在调用run-app
之前运行grails clean
,grails clean-all
和/或grails refresh-dependencies
也无法帮助/解决此错误。< / p>
答案 0 :(得分:1)
我通常更喜欢将.groovy文件用于外部配置而不是.properties,因为我可以将printlns写入其中以检查文件是否已加载。