¿Cómo puedo implementar un archivo war de Grails 3.0.1 en Tomcat7?
(2)
La respuesta está aquí:
https://jira.grails.org/browse/GRAILS-12105
Debe declarar la dependencia a "org.springframework.boot: spring-boot-starter-tomcat"
como se proporciona en build.gradle
¿Cómo puedo implementar un archivo war de Grails 3.0.1
, una versión no incorporada de Tomcat7? Todo lo que obtengo es una página en blanco o un error 404. Puedo implementar con éxito mis otros archivos de guerra, así que sé que no es un problema con Tomcat. Mis versiones y los pasos que tomé están a continuación:
Server version: Apache Tomcat/7.0.52 (Ubuntu)
Grails Version: 3.0.1
Groovy Version: 2.4.3
JVM Version: 1.7.0_80
Sospecho que el problema tiene algo que ver con Spring framework o Gradle. No estoy muy familiarizado con ninguno de ellos, pero noté que 3.0.1 ya no usa un web.xml
y ya no tiene un archivo Config.groovy
. El siguiente sitio detalla cómo implementar un proyecto de Grails en 3.0.x.
http://grails.github.io/grails-doc/3.0.x/guide/deployment.html
-
grails run-app
y se implementó enlocalhost:8080
maravillosamente sin problemas.
No obstante, no quiero usar la versión integrada de Tomcat. Me gustaría implementarlo en una versión diferente de Tomcat, y aquí es donde me encuentro con problemas.
- Cambié el alcance de mis dependencias Tomcat a las proporcionadas:
-
provided "org.springframework.boot:spring-boot-starter-tomcat"
-
- Genere el archivo de guerra usando la guerra de los
grails war
-
website.war
agregado.war a/var/lib/tomcat7/webapps
- corrió
sudo service tomcat7 restart
para reiniciar tomcat - comprobado para ver si el
website.war
desempaquetó automáticamente (lo hizo) - comprobado
localhost:9999/website
-
^ Esto me da es una página blanca en blanco.
- Eliminé el
website.war
y su carpeta asociada no empaquetada.- comprobado
localhost:9999
- me llevó con éxito a la pantalla predeterminada de Tomcat
- firmado en la aplicación de administrador
- desplegó el
website.war
en la aplicación del administrador - me dio el estado
ok
- comprobado
localhost:9999/website
- comprobado
^ Esto me da el siguiente error:
HTTP Status 404 - / sitio web, el recurso solicitado no está disponible.
Otra información relevante:
https://grails.github.io/grails-doc/3.0.x/guide/single.html :
"Grails 3.0 ya no requiere web.xml. Las personalizaciones se pueden hacer a través de Spring"
El archivo BuildConfig.groovy
también ha sido cambiado.
Ubicación anterior:
grails-app/conf/BuildConfig.groovy
Nueva ubicación:build.gradle
Descripción: la configuración del tiempo de compilación ahora se define en un archivo de compilación de Gradle
Otras publicaciones que he encontrado: (lo siento por no proporcionar enlaces, no puedo publicar más de dos enlaces sin al menos 10 puntos de reputación).
grails.org/wiki/Deployment#Tomcat
- Esto sugiere poner una guerra en la carpeta webapps. Ya lo he intentado y no está funcionando.
stackoverflow.com/questions/27557893/grails-app-deploy-in-tomcat-server-using-war-file-fails
- Él está haciendo una pregunta muy similar, pero él está usando una versión diferente de Grails
- La solución marcada hace referencia a
Config.groovy
- Sin embargo, la configuración del tiempo de compilación en
Grails 3.0.1
ahora está enBuild.gradle
- No sé si resolvió el problema con éxito.
stackoverflow.com/questions/23664421/cant-deploy-grails-war-file-in-tomcat-results-in-404
- La solución requiere un cambio en
Config.groovy
, que ya no está disponible en los proyectos deGrails 3.0.1
EDITAR:
Cuando descomprime la carpeta catalina.out
el archivo de registro de catalina.out
muestra esto:
:: Spring Boot :: (v1.2.3.RELEASE)
Jun 07, 2015 3:01:23 PM org.apache.catalina.core.ContainerBase addChildInternal
SEVERE: ContainerBase.addChild: start:
org.apache.catalina.LifecycleException: Failed to start component [StandardEngine[Catalina].StandardHost[localhost].StandardContext[/website]]
at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:154)
at org.apache.catalina.core.ContainerBase.addChildInternal(ContainerBase.java:901)
at org.apache.catalina.core.ContainerBase.addChild(ContainerBase.java:877)
at org.apache.catalina.core.StandardHost.addChild(StandardHost.java:632)
at org.apache.catalina.startup.HostConfig.deployWAR(HostConfig.java:1073)
at org.apache.catalina.startup.HostConfig$DeployWar.run(HostConfig.java:1857)
at java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:471)
at java.util.concurrent.FutureTask.run(FutureTask.java:262)
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1145)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:615)
at java.lang.Thread.run(Thread.java:745)
Caused by: java.lang.NoSuchMethodError: javax.servlet.ServletContext.getVirtualServerName()Ljava/lang/String;
at org.apache.tomcat.websocket.server.WsServerContainer.<init>(WsServerContainer.java:147)
at org.apache.tomcat.websocket.server.WsSci.init(WsSci.java:131)
at org.apache.tomcat.websocket.server.WsSci.onStartup(WsSci.java:47)
at org.apache.catalina.core.StandardContext.startInternal(StandardContext.java:5456)
at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:150)
... 10 more
Jun 07, 2015 3:01:23 PM org.apache.catalina.startup.HostConfig deployWAR
SEVERE: Error deploying web application archive /var/lib/tomcat7/webapps/website.war
java.lang.IllegalStateException: ContainerBase.addChild: start: org.apache.catalina.LifecycleException: Failed to start component [StandardEngine[Catalina].StandardHost[localhost].StandardContext[/website]]
at org.apache.catalina.core.ContainerBase.addChildInternal(ContainerBase.java:904)
at org.apache.catalina.core.ContainerBase.addChild(ContainerBase.java:877)
at org.apache.catalina.core.StandardHost.addChild(StandardHost.java:632)
at org.apache.catalina.startup.HostConfig.deployWAR(HostConfig.java:1073)
at org.apache.catalina.startup.HostConfig$DeployWar.run(HostConfig.java:1857)
at java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:471)
at java.util.concurrent.FutureTask.run(FutureTask.java:262)
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1145)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:615)
at java.lang.Thread.run(Thread.java:745)
Jun 07, 2015 3:01:23 PM org.apache.coyote.AbstractProtocol start
INFO: Starting ProtocolHandler ["http-bio-9999"]
Jun 07, 2015 3:01:23 PM org.apache.catalina.startup.Catalina start
INFO: Server startup in 26775 ms
Luego, cuando intento cargar localhost:9999/website
el archivo catalina.out
muestra esto:
Jun 07, 2015 3:05:04 PM org.apache.coyote.AbstractProtocol pause
INFO: Pausing ProtocolHandler ["http-bio-9999"]
Jun 07, 2015 3:05:04 PM org.apache.catalina.core.StandardService stopInternal
INFO: Stopping service Catalina
Jun 07, 2015 3:05:04 PM org.apache.coyote.AbstractProtocol stop
INFO: Stopping ProtocolHandler ["http-bio-9999"]
Jun 07, 2015 3:05:04 PM org.apache.coyote.AbstractProtocol destroy
INFO: Destroying ProtocolHandler ["http-bio-9999"]
Jun 07, 2015 3:05:06 PM org.apache.catalina.startup.ClassLoaderFactory validateFile
WARNING: Problem with directory [/usr/share/tomcat7/common/classes], exists: [false], isDirectory: [false], canRead: [false]
Jun 07, 2015 3:05:06 PM org.apache.catalina.startup.ClassLoaderFactory validateFile
WARNING: Problem with directory [/usr/share/tomcat7/common], exists: [false], isDirectory: [false], canRead: [false]
Jun 07, 2015 3:05:06 PM org.apache.catalina.startup.ClassLoaderFactory validateFile
WARNING: Problem with directory [/usr/share/tomcat7/server/classes], exists: [false], isDirectory: [false], canRead: [false]
Jun 07, 2015 3:05:06 PM org.apache.catalina.startup.ClassLoaderFactory validateFile
WARNING: Problem with directory [/usr/share/tomcat7/server], exists: [false], isDirectory: [false], canRead: [false]
Jun 07, 2015 3:05:06 PM org.apache.catalina.startup.ClassLoaderFactory validateFile
WARNING: Problem with directory [/usr/share/tomcat7/shared/classes], exists: [false], isDirectory: [false], canRead: [false]
Jun 07, 2015 3:05:06 PM org.apache.catalina.startup.ClassLoaderFactory validateFile
WARNING: Problem with directory [/usr/share/tomcat7/shared], exists: [false], isDirectory: [false], canRead: [false]
Jun 07, 2015 3:05:06 PM org.apache.coyote.AbstractProtocol init
INFO: Initializing ProtocolHandler ["http-bio-9999"]
Jun 07, 2015 3:05:06 PM org.apache.catalina.startup.Catalina load
INFO: Initialization processed in 576 ms
Jun 07, 2015 3:05:06 PM org.apache.catalina.core.StandardService startInternal
INFO: Starting service Catalina
Jun 07, 2015 3:05:06 PM org.apache.catalina.core.StandardEngine startInternal
INFO: Starting Servlet Engine: Apache Tomcat/7.0.52 (Ubuntu)
Jun 07, 2015 3:05:06 PM org.apache.catalina.startup.HostConfig deployDescriptor
INFO: Deploying configuration descriptor /etc/tomcat7/Catalina/localhost/host-manager.xml
Jun 07, 2015 3:05:07 PM org.apache.catalina.startup.HostConfig deployDescriptor
INFO: Deploying configuration descriptor /etc/tomcat7/Catalina/localhost/docs.xml
Jun 07, 2015 3:05:07 PM org.apache.catalina.startup.HostConfig deployDescriptor
INFO: Deploying configuration descriptor /etc/tomcat7/Catalina/localhost/manager.xml
Jun 07, 2015 3:05:07 PM org.apache.catalina.startup.HostConfig deployDescriptor
INFO: Deploying configuration descriptor /etc/tomcat7/Catalina/localhost/examples.xml
Jun 07, 2015 3:05:07 PM org.apache.catalina.startup.TaglibUriRule body
INFO: TLD skipped. URI: http://java.sun.com/jstl/core_rt is already defined
Jun 07, 2015 3:05:07 PM org.apache.catalina.startup.TaglibUriRule body
INFO: TLD skipped. URI: http://java.sun.com/jstl/core is already defined
Jun 07, 2015 3:05:07 PM org.apache.catalina.startup.TaglibUriRule body
INFO: TLD skipped. URI: http://java.sun.com/jsp/jstl/core is already defined
Jun 07, 2015 3:05:07 PM org.apache.catalina.startup.TaglibUriRule body
INFO: TLD skipped. URI: http://java.sun.com/jstl/fmt_rt is already defined
Jun 07, 2015 3:05:07 PM org.apache.catalina.startup.TaglibUriRule body
INFO: TLD skipped. URI: http://java.sun.com/jstl/fmt is already defined
Jun 07, 2015 3:05:07 PM org.apache.catalina.startup.TaglibUriRule body
INFO: TLD skipped. URI: http://java.sun.com/jsp/jstl/fmt is already defined
Jun 07, 2015 3:05:07 PM org.apache.catalina.startup.TaglibUriRule body
INFO: TLD skipped. URI: http://java.sun.com/jsp/jstl/functions is already defined
Jun 07, 2015 3:05:07 PM org.apache.catalina.startup.TaglibUriRule body
INFO: TLD skipped. URI: http://jakarta.apache.org/taglibs/standard/permittedTaglibs is already defined
Jun 07, 2015 3:05:07 PM org.apache.catalina.startup.TaglibUriRule body
INFO: TLD skipped. URI: http://jakarta.apache.org/taglibs/standard/scriptfree is already defined
Jun 07, 2015 3:05:07 PM org.apache.catalina.startup.TaglibUriRule body
INFO: TLD skipped. URI: http://java.sun.com/jstl/sql_rt is already defined
Jun 07, 2015 3:05:07 PM org.apache.catalina.startup.TaglibUriRule body
INFO: TLD skipped. URI: http://java.sun.com/jstl/sql is already defined
Jun 07, 2015 3:05:07 PM org.apache.catalina.startup.TaglibUriRule body
INFO: TLD skipped. URI: http://java.sun.com/jsp/jstl/sql is already defined
Jun 07, 2015 3:05:07 PM org.apache.catalina.startup.TaglibUriRule body
INFO: TLD skipped. URI: http://java.sun.com/jstl/xml_rt is already defined
Jun 07, 2015 3:05:07 PM org.apache.catalina.startup.TaglibUriRule body
INFO: TLD skipped. URI: http://java.sun.com/jstl/xml is already defined
Jun 07, 2015 3:05:07 PM org.apache.catalina.startup.TaglibUriRule body
INFO: TLD skipped. URI: http://java.sun.com/jsp/jstl/xml is already defined
Jun 07, 2015 3:05:07 PM org.apache.catalina.startup.HostConfig deployWAR
INFO: Deploying web application archive /var/lib/tomcat7/webapps/website.war
Jun 07, 2015 3:05:07 PM org.apache.catalina.loader.WebappClassLoader validateJarFile
INFO: validateJarFile(/var/lib/tomcat7/webapps/website/WEB-INF/lib/tomcat-embed-core-8.0.20.jar) - jar not loaded. See Servlet Spec 3.0, section 10.7.2. Offending class: javax/servlet/Servlet.class
Jun 07, 2015 3:05:07 PM org.apache.catalina.loader.WebappClassLoader validateJarFile
INFO: validateJarFile(/var/lib/tomcat7/webapps/website/WEB-INF/lib/tomcat-embed-el-8.0.20.jar) - jar not loaded. See Servlet Spec 3.0, section 10.7.2. Offending class: javax/el/Expression.class
Jun 07, 2015 3:05:07 PM org.apache.catalina.deploy.WebXml setVersion
WARNING: Unknown version string [3.1]. Default version will be used.
En un esfuerzo por proporcionar una respuesta más completa, utilizando el enlace proporcionado por David Gonzalez Maline, Graeme hace referencia a un compromiso de documentación en GitHub.
Tenga en cuenta que, de forma predeterminada, Grails incluirá una versión incrustable de Tomcat dentro del archivo WAR para que pueda ejecutarse (consulte la sección anterior), esto puede causar problemas si implementa en una versión diferente de Tomcat. Si no tiene la intención de utilizar el contenedor incrustado, debe cambiar el alcance de las dependencias de Tomcat a @ provided @ antes de implementarlo en su contenedor de producción en
build.gradle
:
provided "org.springframework.boot:spring-boot-starter-tomcat"
Fuente (énfasis mío)
En resumen, si lo deja en el ámbito de compile
predeterminado, incluirá dos versiones diferentes de Tomcat, Tomcat 7 (en el que está implementando) y Tomcat 8 (proporcionado por spring-boot-starter-tomcat
).