Hacer deploy de una aplicación en Heroku es verdaderamente fácil. Heroku funciona con git, con lo cual normalmente lo único que tendrás que hacer es apuntar una remote branch a tu repositorio de Heroku y hacer push de tu código allí. Simple. Lo único, si tu app tiene una base de datos, tendrás que configurarla para que funcione en los diferentes entornos y no te suelte ese dichoso “Cannot connect to database”.
El sábado hice deploy de una aplicación con Play Framework y Slick 3.0.1 en Heroku, utilizando PostgreSQL como base de datos. PostgreSQL se convirtió en una de mis bases de datos favoritas cuando empecé a utilizarla en mi proyecto de fin de carrera juntos con la extensión especial PostGIS. PostgreSQL es una base de datos muy estable y con muchos años en el mercado, está probadísima, además la interfaz gráfica pgAdmin III te facilitará su administración enormemente. Heroku también tiene una integración con PostgreSQL y te ofrecen hosting en el cloud con Heroku Postgres, así que para mí, perfecto.
Configuración
Vamos al lío. Lo primero que tienes que hacer es asegurarte de que tienes la dependencia del driver de Postgres en el fichero built.sbt, en mi caso:
1 |
libraryDependencies += "org.postgresql" % "postgresql" % "9.4-1201-jdbc41" |
Después crea un fichero con nombre Procfile con lo siguiente:
web: target/universal/stage/bin/myapp -Dhttp.port=${PORT} -Dplay.evolutions.db.default.autoApply=true
Donde myapp es el nombre de tu aplicación. Este fichero le indicará a los dynos de Heroku como deben arrancarla. Importante: si te fijas no he puesto nada sobre la dirección de la DATABASE_URL de la base de datos. Cuando creas una aplicación con Heroku que tenga una base de datos Postgres, creará una base de datos en el cloud de Heroku con una variable de entorno DATABASE_URL para dicha base de datos:
1 |
postgres://username:password@host:port/db |
Normalmente Play crea a partir de esta información la URL de JDBC, pero a Slick esto no le gusta y no funciona. Para que funcione, en Heroku define las siguientes variables de entorno, siempre adaptándolas a tu caso:
1 2 3 |
JDBC_DATABASE_URL = jdbc:postgresql://host:port/db JDBC_DATABASE_USERNAME = username JDBC_DATABASE_PASSWORD = password |
Y en el fichero de configuración application.conf pondremos unas bonitas variables que leerán los valores de las variables de entorno de Heroku cuando esté funcionando allí:
1 2 3 |
db.default.url=${?JDBC_DATABASE_URL} db.default.username=${?JDBC_DATABASE_USERNAME} db.default.password=${?JDBC_DATABASE_PASSWORD} |
¡Este es mi primer post en español! Si te ha gustado o te ha sigo útil, por favor, ¡compártelo ya!