¡Qué fácil desplegar con Heroku y Spark!
Antes de leer el post, si no conoces los siguientes productos consultarlos antes:
Después de un intento fallido de desplegar el API REST hecho con Spark Java Framework de Calcula Notas en Openshift, he conseguido hacerlo con Heroku mucho más fácil.
¿Por qué Spark Java?
Muy sencillo, porque Spark Java es un framework muy ligero para hacer aplicaciones web muy facilmente y rapido con Java 8, ya que por temas de universidad y que quería centrarme en añadir una nueva funcionalidad en Calcula Notas, lo he hecho con Java, porque es el lenguaje que ya conozco y en el que podía hacer una aplicación chula con acceso a la base de datos, etc. Es lo que he estado haciendo en el grado superior una y otra vez.
Openshift
Esta muy bien, pero no era la mejor solución para lo que yo tenía creado, ya que tenía que hacer funcionar un Jetty Java Web Server y el tutorial de Openshift estaba más que desfasado.
- El link de descarga del servidor jetty de un fichero de configuración ya no existía.
- No conseguí cambiar la versión de java7 del servidor a java8.
- Probé con múltiples fork del código de ejemplo original.
Resumiendo, perdí demasiado tiempo y me pase a probar Heroku.
Heroku
Para mi gusto, mucho mejor documentado. Esta solución ya la conocía de entrada, porque en los tutoriales que existen en la página oficial de spark ya te dicen como desplegar en heroku.
¡¡Comencemos!!
Primero seguí el tutorial de Heroku mientras miraba el otro tutorial de Spark con Heroku, este último no lo recomiendo para nada, porque lo único que hizo fue confundirme.
Si sigues el tutorial paso a paso, todo debería ir bien, PERO de todas formas por si no funciona, como me pasó a mí, voy a explicar los pequeños cambios que hice para que funcionara bien.
Instalar heroku
Al instalar Heroku y Maven me daba fallo de que no encontraba el jdk de java8, así que puse lo siguiente:
export JAVA_HOME=/Library/Java/JavaVirtualMachines/jdk1.8.0_{mi-version-java}.jdk/Contents/Home
Procfile y MVN files
Añadir al proyecto los siguiente ficheros tal cual:
Actulazar Maven a 3.3
<!-- Maven build -->
<build>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-compiler-plugin</artifactId>
<version>3.3</version>
<configuration>
<source>1.8</source>
<target>1.8</target>
<optimize>true</optimize>
<debug>true</debug>
</configuration>
</plugin>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-dependency-plugin</artifactId>
<version>2.4</version>
<executions>
<execution>
<id>copy-dependencies</id>
<phase>package</phase>
<goals><goal>copy-dependencies</goal></goals>
</execution>
</executions>
</plugin>
</plugins>
</build>
Cambiar la versión Maven build en el fichero POM.xml que nos dan en el código de ejemplo de Heroku por 3.3.
Y eso es todo, después añadí un addon como dice en el tutorial para postgresql gratis y puse el jdbc en mi proyecto. Todos los comandos heroku para desplegar, hacer push al server, ver los datos de postgresql y ver los logs del servidor esta muy bien comentado en su tutorial.