Saltar al contenido principal

Actualización de producción

[Traducción Beta No Oficial]

Esta página fue traducida por PageTurner AI (beta). No está respaldada oficialmente por el proyecto. ¿Encontraste un error? Reportar problema →

[Repositorio de soporte]

El cambio descrito en esta sección puede consultarse en PR #5 del repositorio de soporte.

Actualizando nuestra base de datos de producción para usar migraciones versionadas

Si has seguido nuestro tutorial hasta este punto, quizás te preguntes: ¿cómo actualizamos la instancia de producción de nuestra base de datos para que utilice el flujo de migraciones versionadas? En desarrollo local podemos borrar la base de datos y empezar de cero, pero eso no es viable en producción por razones obvias.

Como muchas otras herramientas de gestión de esquemas de bases de datos, Atlas utiliza una tabla de metadatos en la base de datos destino para registrar qué migraciones ya se han aplicado. Cuando empezamos a usar Atlas en una base de datos existente, debemos indicarle de algún modo que todas las migraciones hasta cierta versión ya están aplicadas.

Para ilustrarlo, intentemos ejecutar el comando migrate apply de Atlas en una base de datos que actualmente gestionamos con migraciones automáticas, usando el directorio de migraciones que acabamos de crear. Fíjate que usamos una cadena de conexión a una base de datos que ya tiene el esquema de la aplicación instanciado (usamos el sufijo /db para indicar que queremos conectarnos a la base de datos db).

atlas migrate apply --dir file://ent/migrate/migrations --url mysql://root:pass@localhost:3306/db

Atlas devuelve un error:

Error: sql/migrate: connected database is not clean: found table "atlas_schema_revisions" in schema "db". baseline version or allow-dirty is required

Este error es esperable, ya que es la primera vez que ejecutamos Atlas en esta base de datos. Como indica el mensaje, necesitamos "establecer una línea base" (baseline). Esto significa que debemos indicar a Atlas que la base de datos ya está en un estado que corresponde con una de las versiones del directorio de migraciones.

Para solucionarlo, usamos la bandera --baseline para indicar a Atlas que la base de datos ya está en una versión específica:

atlas migrate apply --dir file://ent/migrate/migrations --url mysql://root:pass@localhost:3306/db --baseline 20221114165732

Atlas informa que no hay nada nuevo que ejecutar:

No migration files to execute

¡Mucho mejor! Ahora, verifiquemos que Atlas reconozca qué migraciones ya se han aplicado usando el comando migrate status:

atlas migrate status --dir file://ent/migrate/migrations --url mysql://root:pass@localhost:3306/db

Atlas informa:

Migration Status: OK
-- Current Version: 20221114165732
-- Next Version: Already at latest version
-- Executed Files: 1
-- Pending Files: 0

¡Perfecto! Hemos actualizado con éxito nuestro proyecto para usar migraciones versionadas con Atlas.

A continuación, veamos cómo añadimos una nueva migración a nuestro proyecto cuando hacemos cambios en nuestro esquema de Ent.