tomcat grails

¿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

  1. grails run-app y se implementó en localhost: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.

  1. Cambié el alcance de mis dependencias Tomcat a las proporcionadas:
    • provided "org.springframework.boot:spring-boot-starter-tomcat"
  2. 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.

  1. 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

^ 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á en Build.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 de Grails 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 ).