Probando Grails en Google App Engine

Este es un pequeño tutorial para probar una aplicación desarrollada con Grails sobre Google App Engine. La aplicación es lo más sencilla posible: no tiene clases de dominio ni servicios ni nada, tan solo un controlador que pinta “Hola mundo”. Las versiones que he utilizado son Grails 1.2.1 (descárgatelo de aquí: http://grails.org/Download) y Google App Engine SDK para Java 1.3.1 (descárgatelo de aquí: http://code.google.com/p/googleappengine/downloads/list)

El primer paso de todos es crear una cuenta en http://code.google.com/appengine y crear una aplicación. Para este ejemplo, asumiremos que el nombre de la aplicación es tuapp, pero podría ser cualquier otro. El nombre de la aplicación en App Engine debe coincidir con el nombre de la aplicación Grails.

Descargar el Google App Engine SDK, descomprimirlo en un directorio y establecer la variable de entorno APPENGINE_HOME para que apunte a dicho directorio. Ejecutar los siguientes comandos (se supone que tenemos instalado Grails y que el comando grails está en el PATH)

grails create-app tuapp
cd tuapp
grails set-version 1

Google App Engine no acepta números de versión decimales (como 0.1), por eso es importante que la versión sea un número entero, como 1, 2, etc.

Hay que desinstalar el plugin de Tomcat (solo se desinstala para esta aplicación, no para todo el sistema) ya que el plugin de Google App Engine lleva su propio servidor.

grails uninstall-plugin tomcat
grails install-plugin app-engine

Elegir jpa cuando te pregunte.

Ahora vamos a crear un controlador de prueba:

grails create-controller test.Test

Editar grails-app/controllers/test/TestController.groovy y modificar el closure index para que quede así:

package test

class TestController {
    def index = { render "Hola mundo" }
}

Editar el fichero grails-app/conf/UrlMappings.groovy y cambiar el mapeo de “/” para que apunte al controller que acabamos de crear

"/"(controller:'test', action:'index')

Lanzar la aplicación con:

grails run-app

Probar que todo funciona visitando http://localhost:8080. Parar el servidor con CTRL+C.

Añadir las siguientes lineas al fichero grails-app/conf/Config.groovy con los datos de tu cuenta de Google.

google.appengine.email="tumail@gmail.com"
google.appengine.password="tupassword"

Despliega la aplicación con el siguiente comando:

grails app-engine deploy

Prueba que todo funciona correctamente visitando http://tuapp.appspot.com. He hecho más de una prueba, y no he conseguido hacerlo funcionar. Parece que la primera petición http que se hace a la aplicación, Google App Engine la inicializa y Grails tarda demasiado. Google App Engine tiene un límite de 30 segundos por petición, y si se supera ese tiempo, mata la petición. Y con ella, el proceso de arranque. Al parecer es un bug conocido: http://jira.codehaus.org/browse/GRAILSPLUGINS-1736. En fin, estaré al tanto para ver si se arregla este bug, ya que es bastante interesante poder disponer de un hosting gratuito para nuestras aplicaciones en Grails. Mientras tanto, probaremos otras opciones como Gaelyk, que es bastante más ligero.

5 thoughts on “Probando Grails en Google App Engine

  1. El problema de arranque solo pasa con la primera petición. Pero si haces un refresh en la pagina, el programa funciona normalmente.

    Tambien te recomiendo que instales el plugin gorm-jpa ( grails install-plugin gorm-jpa ) para que funcionen los dynamic finders de GORM.

  2. Muchas gracias por tu comentario Tomas. Es verdad que acaba funcionando, pero solo si la aplicación es muy sencilla como el Hola Mundo… http://vilches.appspot.com/
    he probado a instalarme el plugin de gorm-jpa y a hacer una aplicación con una única tabla, y no he conseguido hacerla funcionar todavía, ni refrescando ni nada… Creo que todavía el soporte de grails para app engine no está muy logrado y falla de vez en cuando…

  3. Creo que es el plugin de AppEngine, el que te pone un controlador reload..”algo”… sirve para que, una vez subido, meter una tarea de cron en AppEngine que cada media hora ejecute esa ruta.. de manera que el servidor virtual no se descargue y no exista ese problema de fallo en la primera petición ;)

    Yo he conseguido tirar con Grails y GORM-JPA pero aún tengo problemas con relaciones muchos-a-uno y uno-a-uno ya que las vistas esperan un GORM y no un GORM-JPA por lo que hay que realizar consultas adicionales para obtener los listados para relacionar el objeto… luego no funcionan las transacciones así que hay que quitar el código .withTransaction… y meterlo directamente. Una vez se retocan los controladores, la cosa empieza a funcionar… aún así es un poco engorroso tener que usar JPA, no poder usar los Criteria de GORM y cosas así :(

  4. El problema de arranque solo pasa con la primera petición. Pero si haces un refresh en la pagina, el programa funciona normalmente.

    Tambien te recomiendo que instales el plugin gorm-jpa ( grails install-plugin gorm-jpa ) para que funcionen los dynamic finders de GORM.

  5. Hola que tal buen dia. Estoy intentando instalar el Complemento “Google Plugin for Eclipse 3.4” para el eclipse Helios. El error es el siguiente:

    !ENTRY org.eclipse.equinox.p2.operations 4 0 2010-09-10 13:02:46.156
    !MESSAGE Operation details
    !SUBENTRY 1 org.eclipse.equinox.p2.director 4 1 2010-09-10 13:02:46.156
    !MESSAGE Cannot complete the install because one or more required items could not be found.
    !SUBENTRY 2 org.eclipse.equinox.p2.director 4 0 2010-09-10 13:02:46.156
    !MESSAGE Software being installed: Google App Engine Java SDK 1.3.7 1.3.7.v201008311405 (com.google.appengine.eclipse.sdkbundle.e34.feature.1.3.7.feature.group 1.3.7.v201008311405)
    !SUBENTRY 2 org.eclipse.equinox.p2.director 4 0 2010-09-10 13:02:46.156
    !MESSAGE Missing requirement: Google Plugin for Eclipse 3.4 1.3.3.v201006111302 (com.google.gdt.eclipse.suite.e34.feature.feature.group 1.3.3.v201006111302) requires ‘org.eclipse.core.runtime [3.4.0,3.5.0)’ but it could not be found
    !SUBENTRY 2 org.eclipse.equinox.p2.director 4 1 2010-09-10 13:02:46.156
    !MESSAGE Cannot satisfy dependency:
    !SUBENTRY 3 org.eclipse.equinox.p2.director 4 0 2010-09-10 13:02:46.156
    !MESSAGE From: Google App Engine Java SDK 1.3.7 1.3.7.v201008311405 (com.google.appengine.eclipse.sdkbundle.e34.feature.1.3.7.feature.group 1.3.7.v201008311405)
    !SUBENTRY 3 org.eclipse.equinox.p2.director 4 0 2010-09-10 13:02:46.156
    !MESSAGE To: com.google.gdt.eclipse.suite.e34.feature.feature.group 1.3.3

    Esto lo obtuve el log que me genero eclipse. Les agradeceria mucho su apoyo. La verdad le estados batallando bastante al respecto.

    De ante mano muchas gracias, espero su pronta respuesta

Comments are closed.