7

Me encontré con un problema en el que estaba trabajando en dos ramas en un proyecto de rieles y cada proyecto tiene una migración para agregar una columna. En ese momento, rake db:migrate:reset causaba un problema y confiaba únicamente en mi schema.rb para representar correctamente el estado de mi base de datos. En un momento, me encontré con un problema donde una columna agregada por la rama A se metió en el esquema de la rama B. Como el migrate:reset no era una opción, recurrí a editar manualmente el archivo de esquema. Cometí este cambio que básicamente eliminó la columna de la rama A que no necesitaba en el esquema schema.rb de la rama B.Se considera seguro editar manualmente schema.rb en rieles

El problema vino después de haber fusionado la rama A en el maestro. Cuando traté de cambiar la base de la rama B a maestra, todavía tenía esa confirmación en B para eliminar la columna (que ahora se ha vuelto relevante porque está en el maestro) en el archivo de esquema. Git no vio un conflicto para esto y lo fusionó automáticamente. Al final de mi rebase, descubrí que mi esquema no es coherente con lo que tengo en master.

Mi solución es editar nuevamente el archivo de esquema y agregar manualmente la columna eliminada nuevamente al archivo de esquema. Mi pregunta es: ¿esto se considera poco convencional? ¿peligroso? ¿Hacky?

En este momento se trata de una columna, pero si esto implicaba eliminaciones/adiciones de varias columnas, ¿la solución (peligrosa) podría generar más problemas y una inconsistencia de db/schema.rb?

Respuesta

6

En general, se considera una mala práctica editar el archivo schema.rb.

De acuerdo con la Rails Guide on Migrations:

migraciones, poderoso, ya que pueden ser, no son la fuente autorizada para el esquema de base de datos. Ese rol corresponde a db/schema.rb o a un archivo SQL que Active Record genera al examinar la base de datos. No están diseñados para ser editados, simplemente representan el estado actual de la base de datos.

schema.rb se actualiza cada vez que se ejecuta una nueva migración:

cuenta que la ejecución de la db: migrate también invoca el PP: tarea de descarga, lo que permitirá actualizar su base de datos/esquema: esquema. archivo rb para que coincida con la estructura de su base de datos.

Recomendaría simplemente dedicar algo de tiempo para resolver las cosas y obtener el archivo schema.rb de nuevo en marcha y corregir hasta el último conjunto de migraciones.

+0

De acuerdo. Usted está potencialmente manejando la utilidad de "rake db: migrate version = xxx" y creando dolores de cabeza en el futuro al salir de la reserva y editar manualmente schema.rb. – railsdog

Cuestiones relacionadas