Desplegando una aplicación Grails en Morph
Morph es un servicio de hosting, que utiliza por detrás los servicios de Amazon, hasta no hace mucho sólo tenía soporte para Rails pero han añadido soporte a Java (vía Jetty), que todavía está en beta.
Morph tiene un plan gratuito para desarrolladores, y he probado a subir una micro-aplicación desarrollada con Grails. Como lo interesante es ver lo sencillo que es desplegar una aplicación, he creado una TODO list muy básica, sin gestión de usuarios y utilizando el scaffolding dinámico, que también podría servir para iniciarse en éste framework.
Primero deberemos registrarnos, y tras esto descargar el morph_deploy.jar y el morph_deploy.properties que usaremos para desplegar nuestra aplicación cuando la tengamos terminada.
Creamos la aplicación y, dentro del directorio de la aplicación que se ha creado, una clase del dominio:
grails create-app todo
grails create-domain-class task
En la clase Task.groovy le añadimos algún atributo:
class Task {
String task
}
Creamos un controller vacío:
grails create-controller task
Y para el andamiaje, añadimos al controller:
def scaffold = true
Para verlo en local (http://localhost:8080/todo/):
grails run-app
Podríamos dejar la configuración a la base de datos con hsqldb y no tener que hacer ninguna modificación al estar embebida, pero para usar PostgreSQL, deberemos descargarnos el driver, añadirlo al directorio /lib de nuestra aplicación y hacer las siguientes modificaciones en el DataSource.groovy, en el entorno de producción:
driverClassName = "org.postgresql.Driver"
url = "jdbc:postgresql://XXX.XXX.XXX.XXX/db_XXX"
username = "XXX"
password = "XXX"
Inicio Actualización 09/06/2008: Utilizando el plugin para Morph, ya no es necesario este paso.
Debemos añadir el recurso del DataSource en el web.xml, que se genera con grails install-templates
:
<resource-ref>
<description>Morphlabs Datasource</description>
<res-ref-name>jdbc/morph-ds</res-ref-name>
<res-type>javax.sql.DataSource</res-type>
<res-auth>Container</res-auth>
</resource-ref>
Este recurso, lo tendremos que comentar para probarlo en local, ya que nos dará errores al ejecutar la aplicación.
Fin Actualización
Ya sólo nos quedaría empaquetarlo en un .war:
grails war
Y desplegarlo:
java -jar morph_deploy.jar --config morph_deploy.properties pathdelwar/todo-0.1.war
Que posteriormente, pedirá nuestro usuario/password con los que nos hemos dado de alta en morph y nos desplegará la aplicación.
Tras esto, sólo nos queda esperar unos minutos a que haga se efectúe el despliegue, y ya tenemos la aplicación corriendo. El ejemplo está disponible en http://danilat.morphexchange.com/, como se puede ver, me ha costado más escribir el post que la aplicación+despliegue :P.
Los despliegues se pueden hacer también con Ant y Maven, esto y alguna cosita más se puede encontrar en el Java Cookbook de Morph.
Lo que no tengo demasiado claro son las limitaciones que tendrá el servicio, a parte de poder usar sólo PostgreSQL, estando todavía en beta y si habrá muchas diferencias de los planes de pago con el plan gratuito.