¿Cómo revertir una migración específica?

Tengo el siguiente archivo de migración db\migrate\20100905201547_create_blocks.rb

¿Cómo puedo revertir específicamente ese archivo de migración?

 rake db:rollback STEP=1 

Es una forma de hacerlo, si la migración que desea revertir es la última aplicada. Puedes sustituir 1 por la cantidad de migraciones que quieras volver.

Por ejemplo:

 rake db:rollback STEP=5 

También revertirá toda la migración que ocurrió más tarde (4, 3, 2 y también 1).

Como se sugiere en los comentarios:

Para revertir un uso de migración específico:

 rake db:migrate:down VERSION=20100905201547 
 rake db:migrate:down VERSION=20100905201547 

revertirá el archivo específico.


Para encontrar la versión de todas las migraciones, puede usar este comando:

 rake db:migrate:status 

O simplemente, el prefijo del nombre de archivo de la migración es la versión que necesita para deshacer.


Consulte la entrada de la guía Ruby on Rails sobre migraciones.

Para deshacer la última migración, puede hacer lo siguiente:

 rake db:rollback 

Si desea deshacer una migración específica con una versión, debe hacer lo siguiente:

 rake db:migrate:down VERSION=YOUR_MIGRATION_VERSION 

Por ejemplo, si la versión es 20141201122027, harás:

 rake db:migrate:down VERSION=20141201122027 

para revertir esa migración específica.

rake db:migrate:down VERSION=your_migrations's_version_number_here

La versión es el prefijo numérico en el nombre del archivo de la migración

Cómo encontrar la versión :

Sus archivos de migración se almacenan en su rails_root/db/migrate . Encuentre el archivo apropiado hasta el cual desea deshacer y copie el número de prefijo.

por ejemplo

nombre de archivo: 20140208031131_create_roles.rb luego la versión es 20140208031131

puede deshacer su migración usando rake db:rollback con diferentes opciones.

Pero, según su requisito, la syntax ha cambiado.

Si desea deshacer la última migración, puede usarla.

 rake db:rollback 

o

 rake db:rollback STEP=1 

Si desea retroceder el número de migración de una vez, simplemente pase la discusión

 rake db:rollback STEP=n 

donde n es el número de migración para deshacer desde la última migración.

Si desea deshacer una migración específica, debe pasar la versión de migración en la siguiente syntax.

 rake db:migrate:down VERSION=xxxxx 

donde xxxxx es el número de versión de la migración.

Para deshacer la última migración, puede hacer lo siguiente:

 rake db:rollback 

Si desea deshacer una migración específica con una versión, debe hacer lo siguiente:

 rake db:migrate:down VERSION=YOUR_MIGRATION_VERSION 

Si el archivo de migración que desea revertir se llamó db/migrate/20141201122027_create_some_table.rb , entonces la VERSIÓN para esa migración es 20141201122027 , que es la marca de tiempo de cuando se creó esa migración, y el comando para revertir esa migración sería:

 rake db:migrate:down VERSION=20141201122027 

Revertir la última migración:

 # rails < 5.0 rake db:rollback # rails >= 5.0 rake db:rollback # or rails db:rollback 

Retrocediendo el último n número de migraciones

 # rails < 5.0 rake db:rollback STEP=2 # rails >= 5.0 rake db:rollback STEP=2 # or rails db:rollback STEP=2 

Revertir una migración específica

 # rails < 5.0 rake db:migrate:down VERSION=20100905201547 # rails >= 5.0 rake db:migrate:down VERSION=20100905201547 # or rails db:migrate:down VERSION=20100905201547 

Si se trata de una migración reversible y la última que se ha ejecutado, ejecute rake db:rollback . Y siempre puedes usar la versión. p.ej

el archivo de migración es 20140716084539_create_customer_stats.rb, por lo que el comando de reversión será, rake db:migrate:down VERSION=20140716084539

Las migraciones cambian el estado de la base de datos utilizando el comando

 $ bundle exec rake db:migrate 

Podemos deshacer un solo paso de migración usando

  $ bundle exec rake db:rollback 

Para ir todo el camino de regreso al principio, podemos usar

  $ bundle exec rake db:migrate VERSION=0 

Como se puede adivinar, sustituyendo cualquier otro número por 0 migra a ese número de versión, donde los números de versión provienen de listar las migraciones secuencialmente

De la Guía de Rails

Revertir migraciones previas

Puede usar la capacidad de Active Record para deshacer migraciones utilizando el método de revert :

 require_relative '20100905201547_create_blocks' class FixupCreateBlock < ActiveRecord::Migration def change revert CreateBlock create_table(:apples) do |t| t.string :variety end end end 

El método de revert también acepta un bloque de instrucciones para revertir. Esto podría ser útil para revertir partes seleccionadas de migraciones anteriores. Por ejemplo, imaginemos que CreateBlock está comprometido y luego se decide que sería mejor usar validaciones de Active Record, en lugar de la restricción CHECK, para verificar el código postal.

  class DontUseConstraintForZipcodeValidationMigration < ActiveRecord::Migration def change revert do # copy-pasted code from CreateBlock reversible do |dir| dir.up do # add a CHECK constraint execute <<-SQL ALTER TABLE distributors ADD CONSTRAINT zipchk CHECK (char_length(zipcode) = 5); SQL end dir.down do execute <<-SQL ALTER TABLE distributors DROP CONSTRAINT zipchk SQL end end # The rest of the migration was ok end end end 

La misma migración también podría haberse escrito sin utilizar revertir, pero esto habría implicado algunos pasos más: invertir el orden de create_table y reversible, reemplazar create_table por drop_table, y finalmente reemplazar up por down y viceversa. Todo esto se soluciona revirtiendo.

Bien en rails 5 es bastante fácil rake db: migrate: status o rails db: migrate: status

Se modificó para que maneje de la misma manera. Luego simplemente seleccione qué versión desea revertir y luego ejecute rake db: migrate VERSION = 2013424230423

Asegúrate de que VERSIÓN sea mayúscula

Si tiene un problema con cualquier paso de la migración o está atrapado en el medio, simplemente vaya al archivo de migración y comente las líneas que ya se han migrado.

Espero que ayude

Si desea deshacer y migrar, puede ejecutar:

 rake db:migrate:redo 

Eso es lo mismo que:

 rake db:rollback rake db:migrate