2009-07-28 10 views
14

Tengo una base de datos configurada para la instalación de mi Rails y algunas migraciones configuradas. Me gustaría poder restablecer mi base de datos a no tener tablas/restricciones/etc., Pero no puedo encontrar una forma razonable de hacerlo sin saber el número de migraciones o la fecha y hora de la primera migración. Aquí están mis opciones como las veo:¿Cómo puedo migrar mi base de datos con raíles a la primera revisión sin soltar primero la base de datos?

  • rake db:migrate:reset
  • rake db:migrate:down VERSION=20090701154839 donde 20090701154839 es la marca de tiempo asociada con la primera migración
  • rake db:rollback STEP=15 donde se han registrado 15 migraciones

El problema con db:migrate:reset es que primero descarta la base de datos (hace db:drop, db:create, luego db:migrate). El problema con db:migrate:down es que no quiero codificar la VERSIÓN del principio.

El problema con db:rollback es que no sé la cantidad de pasos desde el principio.

¿Cuáles son mis opciones?

Respuesta

25
rake db:migrate VERSION=0 

Funciona incluso si está utilizando los archivos de migración con marcas de tiempo más recientes.

Actualización: Acabo de probar esto en Rails 3.2.1, y todavía funciona. Ejecuta la parte "hacia abajo" de todas las migraciones conocidas al schema_migrations. No tengo idea si funcionó en 3.1 o no, pero el comentario a continuación indica que esta característica se rompió durante ese tiempo.

+0

Gracias; Esto es lo que estaba buscando. Había intentado con rake: db: migrate: hacia abajo VERSION = 0, pero hacia abajo busca versiones particulares, mientras que db: migrate no lo hace. –

+0

No funciona con rieles 3.1.0 rc 4: 'Sin migración con el número de versión 0' –

+0

@ Marc-AndréLafortune Tuve el mismo problema. Asegúrate de hacer 'rake db: migrate VERSION = 0 '(estaba haciendo db: migrate: down VERSION = 0) – Qasim

0

Es moderadamente hackish, pero podría hacer una consulta para encontrar la primera VERSIÓN en schema_migrations y luego llamar a rake db: migrate: hacia abajo para obtener esa VERSIÓN (supongo que desea empaquetar un script de "reinicio" para tu aplicación).

Eso, por supuesto, requerirá que los métodos descendentes en todas sus migraciones funcionen correctamente.

3

Además de la solución de jdl (correcta) anterior, otra forma de hack-y para lograr esto es hacer rake db:rollback STEP=1000000, donde 1000000 es un número grande, más grande que el número de migraciones que tendrá. Se retrotraerá hasta donde sea posible hasta 1000000 veces, o cuantas veces pones como STEP.

Cuestiones relacionadas