Оболочка Grails при развертывании WAR-файла - PullRequest
0 голосов
/ 11 июня 2009

Я поддерживаю приложение Grails, которое я не написал (на самом деле у меня нет опыта работы с Groovy / Grails :)), и в настоящее время оно содержит ошибку в одной из сред, в которой оно развернуто, но не в других.

Чтобы отладить это, я хочу перейти в оболочку grails на уязвимом сервере, запустить команду, которая, как я подозреваю, подвержена ошибкам, и посмотреть, какие результаты я получу, чтобы увидеть, куда перейти к следующей отладке.

Приложение помещается в файл war с помощью команды grails prod war, scp'd на сервер для развертывания и извлекается с помощью jar -xvf /path/to/war.

Когда я нахожусь в оболочке Grails, я не могу получить доступ ни к одному из классов, определенных в домене.

Вот что я пытаюсь:

`

]$ ~/grails-1.0.4/bin/grails shell

Welcome to Grails 1.0.4 - http://grails.org/
Licensed under Apache Standard License 2.0
Grails home is set to: /home/me/grails-1.0.4        

Base Directory: /var/home/me/skills_test/WEB-INF
Running script /home/me/grails-1.0.4/scripts/Shell.groovy
Environment set to development
     [copy] Copying 1 file to /home/me/.grails/1.0.4/projects/WEB-INF
     [copy] Copying 1 file to /home/me/.grails/1.0.4/projects/WEB-INF
Jun 11, 2009 2:35:19 PM java.util.prefs.FileSystemPreferences$7 run
WARNING: Prefs file removed in background /home/me/.java/.userPrefs/org/codehaus    /groovy/tools/shell/prefs.xml
Groovy Shell (1.5.6, JVM: 10.0-b22)
Type 'help' or '\h' for help.
        ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
groovy:000> new User()
ERROR org.codehaus.groovy.control.MultipleCompilationErrorsException: startup failed,     groovysh_evaluate: 2: unable to resolve class User 
 @ line 2, column 1.
1 error

        at Shell_groovy$_run_closure2.doCall (Shell_groovy:71)
        at org.codehaus.gant.GantMetaClass.invokeMethod (GantMetaClass.java:79)
        at org.codehaus.gant.GantMetaClass.invokeMethod (GantMetaClass.java:94)
        at Shell_groovy$_run_closure2.doCall (Shell_groovy)
        at org.codehaus.gant.GantMetaClass.invokeMethod (GantMetaClass.java:79)
        at org.codehaus.gant.GantMetaClass.invokeMethod (GantMetaClass.java:79)
        at org.codehaus.gant.GantMetaClass.invokeMethod (GantMetaClass.java:94)
        at Shell_groovy$_run_closure1.doCall (Shell_groovy:37)
        at org.codehaus.gant.GantMetaClass.invokeMethod (GantMetaClass.java:79)
        at org.codehaus.gant.GantMetaClass.invokeMethod (GantMetaClass.java:94)
        at Shell_groovy$_run_closure1.doCall (Shell_groovy)
        at org.codehaus.gant.GantMetaClass.invokeMethod (GantMetaClass.java:79)
        at org.codehaus.gant.GantMetaClass.invokeMethod (GantMetaClass.java:79)
        at gant.Gant.dispatch (Gant.groovy:271)
        at gant.Gant.this$2$dispatch (Gant.groovy)
        at gant.Gant.invokeMethod (Gant.groovy)
        at gant.Gant.processTargets (Gant.groovy:436)
        at gant.Gant.processArgs (Gant.groovy:372)
groovy:000> import User
ERROR org.codehaus.groovy.tools.shell.CommandException: Invalid import definition:     'import User'; reason: startup failed, script1244745379552.groovy: 1: unable to resolve     class User
 @ line 1, column 1.
1 error

        at Shell_groovy$_run_closure2.doCall (Shell_groovy:71)
        at org.codehaus.gant.GantMetaClass.invokeMethod (GantMetaClass.java:79)
        at org.codehaus.gant.GantMetaClass.invokeMethod (GantMetaClass.java:94)
        at Shell_groovy$_run_closure2.doCall (Shell_groovy)
        at org.codehaus.gant.GantMetaClass.invokeMethod (GantMetaClass.java:79)
        at org.codehaus.gant.GantMetaClass.invokeMethod (GantMetaClass.java:79)
        at org.codehaus.gant.GantMetaClass.invokeMethod (GantMetaClass.java:94)
        at Shell_groovy$_run_closure1.doCall (Shell_groovy:37)
        at org.codehaus.gant.GantMetaClass.invokeMethod (GantMetaClass.java:79)
        at org.codehaus.gant.GantMetaClass.invokeMethod (GantMetaClass.java:94)
        at Shell_groovy$_run_closure1.doCall (Shell_groovy)
        at org.codehaus.gant.GantMetaClass.invokeMethod (GantMetaClass.java:79)
        at org.codehaus.gant.GantMetaClass.invokeMethod (GantMetaClass.java:79)
        at gant.Gant.dispatch (Gant.groovy:271)
        at gant.Gant.this$2$dispatch (Gant.groovy)
        at gant.Gant.invokeMethod (Gant.groovy)
        at gant.Gant.processTargets (Gant.groovy:436)
        at gant.Gant.processArgs (Gant.groovy:372)
groovy:000> 

`

Как вы можете видеть, я не могу получить доступ к классу "Пользователь" (который находится в доменном каталоге - это Grails 'эквивалент' моделей ', верно?) И не могу импортировать его тоже.

Все примеры использования оболочки grails, которые я видел, все могли получить доступ ко всем классам в приложении без проблем с импортом ... что я сделал не так?

Это потому, что я запускаю оболочку grails для извлеченного файла WAR? Как я могу обойти это?

Ответы [ 2 ]

2 голосов
/ 16 июня 2009

Проблема была в том, что он работал из извлеченного файла WAR - я думаю, что для правильной работы необходимо наличие исходных файлов .java. Я скопировал исходные файлы на сервер, на котором у меня были проблемы, отредактировал конфигурацию, указав правильные источники данных, и смог нормально войти в оболочку.

По какой-то причине вы не можете попасть в оболочку в каталоге с извлеченным файлом WAR, но я приму это сейчас, потому что нашел обходной путь.

1 голос
/ 16 июня 2009

Я не уверен на 100%, но я думаю , что Groovy поддерживает принудительное правило Java, согласно которому нельзя импортировать классы без пакета.

Попробуйте удалить этот оператор import и посмотреть, сможете ли вы работать с объектом User таким образом.

...