2012-05-04 20 views
15

Escribí algunas migraciones para mi aplicación Rails 3, pero me gustaría cambiar el orden de las migraciones. ¿Cómo puedo cambiar la orden de migración o la secuencia? ¿Es tan simple como renombrar el archivo de migración con lo que parece ser la marca de tiempo?Rails change change sequence or order

Sé que esta es una pregunta extraña, pero básicamente, hice un lío de mis migraciones y eliminé algunas migraciones antiguas y ahora tengo que dejar caer una tabla antes de crear una nueva. También sé que puedo incluir la declaración desplegable en la migración de crear la nueva tabla, pero tengo curiosidad por saber cómo reordenar las migraciones.

Respuesta

15

Sí, ejecuta las migraciones que no se han ejecutado en el orden del prefijo. En las versiones anteriores de los rieles, tal vez 2.1 o 2.2, solían ser numeradas comenzando con 01, pero cambiaban a marcas de tiempo.

Hay una tabla que realiza un seguimiento de las migraciones que se han ejecutado. La intención es que varios desarrolladores hayan agregado migraciones y las haya comprobado en el control de versiones más adelante. Por lo tanto, puede haber una migración que no se haya ejecutado, pero que esté numerada antes de la migración con el número más alto que se haya ejecutado.

Si cambia la secuencia de migración, (y la tengo), es preferible utilizar la primera versión antes de todas las migraciones que está reordenando. Use la opción VERSION con db:migrate. Si la migración con el número más alto que desea mantener (no ejecutar el down) es 20120318143249, llámelo de esta manera.

rake db:migrate VERSION=20120318143249 

a menudo corren el vello de una migración, y volver a ejecutarlo hasta que consiga los detalles de la migración a mi satisfacción. A veces los reordena, cuando quiero trabajar en uno de ellos, y quiero que sea el último.

4

Sí, el prefijo en el nombre de archivo es lo que determina el orden de ejecución. Sin embargo, tenga en cuenta que esto solo cambiará su sistema actual si borra su DB/comienza de nuevo.

+0

No siempre es cierto. Suponiendo que las migraciones posteriores son reversibles, puede 'rakear db: migrar VERSIÓN = ' como lo sugiere @ Marlin-Pierce – varleti