Ruby on Rails es un genial framework para desarrollar aplicaciones web. Tiene poco tiempo en el mercado y un crecimiento muy bueno para ser tan joven. Entre las muchas bondades de Rails están las migraciones. Estas son un mecanismo para interactuar con el modelo de datos sin escribir líneas de código SQL o ingresar al motor de base de datos que escojamos.
Una migración te permite crear tablas, agregar columnas, cambiar nombres de tablas, nombres de columnas y cambiar tipos de datos, incluso crear índices sobre columnas existentes. En fin, desde una migración tienes la base de datos a tu merced, sin embargo, eso no es lo más interesante de las migraciones.
Lo mejor de una migración es que se almacenan en archivos con una marca de tiempo única que te permite llevar el seguimiento y conocer cómo es el modelo de datos de tu aplicación.
Para correr una migración en Rails se debe ejecutar el comando
rake db:migrate
Este comando tomará todas las migraciones que no se han corrido y ejecutará las acciones que estas indiquen.
Un pequeño lío
Resulta que en el nuevo lugar donde trabajo he estado trabajando bastante con Ruby on Rails. En una ocasión necesitaba modificar unas columnas de varias tablas pero las migraciones no me estaban corriendo con normalidad.
Fue algo sumamente extraño ya que en el mismo día había corrido otras migraciones de la forma habitual, sin ningún problema.
Supuse que había algo mal escrito así que lo que hice fue reescribir la migración original.
En este inicio de semana, me ocurrió el mismo problema así que decidí buscar al respecto. La solución fue muy simple pero no tan obvia.
Resulta que normalmente trabajo con varias pestañas de la terminal. Una para Rails en donde corro los comandos normales, otra también para Rails pero para abrir la consola y una última para ejecutar comandos git.
La consola de Rails se accede con el comando
rails console
Sucede y pasa que las migraciones no ejecutaban porque tenía abierta la segunda pestaña con la consola de Rails. Al parecer el framework no las ejecuta porque hay una interfaz accediendo a la base de datos y por ello no se pueden hacer los cambios.
¿La solución y lección?
Cuando vaya a correr migraciones, cerrar todas las sesiones de Rails 🙂
La respuesta la encontré en Stack Overflow.
Con sesiones te refieres a bajar todos los procesos “rails s” que que se están ejecutando?
Saludos
Y también los rails c. Aunque hoy me pasó que pude ejecutar las migraciones sin tener que bajar la consola rails (rails c). Comienzo a pensar que la tabla que se esté leyendo pueda influir.
No estoy muy seguro.