Se sabe bien que subir aplicaciones web a Heroku es sencillo. En muchos casos es solo cuestión de correr comandos en la terminal y con una que otra configuración solo con subir los cambios al repositorio basta.
Y si bien tenemos esa facilidad, hay cosas que Heroku deja de hacer por conveniencia, ahorro o que sé yo. Tal es el caso de la ejecución de migraciones cuando se despliegan aplicaciones Ruby on Rails en este servicio.
Normalmente, en un despliegue a Heroku el comando para correr migraciones no es aplicado. Durante el despliegue Heroku ejecuta todo lo necesario para que la aplicación quede disponible con la URL asignada pero lo demás no le concierne.
O sea que si en un nuevo cambio agregamos dos campos nuevos a la base de datos y ejecutamos en una consola heroku push origin master
, al terminar el proceso los campos no estarán en la base de datos Heroku Postgres y la aplicación probablemente va a dejar de funcionar.
Para solventar esta situación hay varias formas. La mejor y actual es usar los Release Phases los cuales son una característica algo nueva.
Solo para el registro algunas alternativas son/fueron:
- Usando un buildpack: El mismo repo recomienda usar release phase.
- Con scripts de Bash: También recomiendan usar release phase.
¿Qué es release phase?
Básicamente es una característica de Heroku que permite correr tareas en momentos previos a que el despliegue culmine.
La jerga de Release Phase está muy ligada a cómo funciona el despliegue en Heroku. Si se quiere entender más, está la documentación.
Con esto en mente, lo mejor es definir un archivo Procfile
en el proyecto y en él tener el siguiente código:
# Procfile
release: bundle exec rails db:migrate
web: bundle exec puma -C config/puma.rb
Ya con la primera línea en ese archivo, en cada despliegue Heroku ejecutará el comando de migración y tendremos el proceso como se debe.
Usando release phase se pueden ejecutar otras tareas necesarias. En este caso la necesidad de correr migraciones queda suplida gracias a esta característica.
Este artículo fue publicado primero en mi blog personal, Otro Espacio Blog. Ahí escribo sobre todo lo que aprendo al programar y también sobre temas no relacionados a tecnología.
Top comments (0)