Обратите внимание: Хотя я использую Grails Shiro plugin, я считаю, что это основная проблема Grails, не имеющая никакого отношения к плагину вообще.Grails 2.4 не будет читать файл конфигурации из/opt
Mac (Yosemtie) и Grails 2.4.5 здесь. Вот лучшие 2 линии от моего 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)
Я серьезно сомневаюсь, что расположение внешнего файла конфигурации, или права доступа к файлам устанавливается на config (или его родительский каталог) сломает плагин Grails Shiro. Я думаю, что это всего лишь вводящее в заблуждение исключение Grails/Groovy. Скорее всего, какое-то исключение безопасности заставляет кое-что не загружать/заполнять правильно (и терпеть неудачу тихо), а затем, когда Grails Shiro вступает во время run-app
, его отсутствует что-то, что должно быть там, и вызывает смерть run-app
.
Любые идеи относительно того, что происходит, или что такое исправление?
Update: Запуск grails clean
, grails clean-all
и/или grails refresh-dependencies
до вызова grails run-app
не помогают/решить эту ошибку либо.
Как пользователь, вызывающий приложение grails run, может ли он копировать файл в этом месте? Мой вопрос касается chown not chmod. Попробуйте chown -r user: user to path из папки, содержащей конфигурацию. Я опубликовал альтернативу загрузки внешней конфигурации на другой аналогичный пост неделю назад – Vahid