run remove references rails migrations data create column ruby-on-rails schema database-schema

ruby on rails - remove - ¿Cómo revertir una migración específica?



remove migration rails (13)

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

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


Bueno, en los carriles 5 es bastante fácil hacer rake db: migrate: status o rails db: migrate: status

Se modificó para que se manejen de la misma manera. Luego simplemente elija la versión que desea revertir y luego ejecute rake db: migrate VERSION = 2013424230423

Asegúrate de que VERSION sea todas mayúsculas

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

Espero que ayude


De la guía de rieles

Revertir migraciones anteriores

Puede usar la capacidad de Active Record para revertir migraciones usando 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 registro activo, 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 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 arriba por abajo y viceversa. Todo esto es atendido por revertir.


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

$ bundle exec rake db:migrate

Podemos deshacer un solo paso de migración usando

$ bundle exec rake db:rollback

Para volver al principio, podemos usar

$ bundle exec rake db:migrate VERSION=0

Como puede suponer, al sustituir cualquier otro número por 0 se migra a ese número de versión, donde los números de versión provienen de la lista de migraciones de forma secuencial


Para revertir todas las migraciones a una versión particular (por ejemplo, 20181002222222 ), use:

rake db:migrate VERSION=20181002222222

(Tenga en cuenta que esto usa db:migrate , no db:migrate:down como en otras respuestas a esta pregunta).

Suponiendo que la versión de migración especificada es más antigua que la versión actual, esto hará retroceder todas las migraciones hasta la versión especificada, pero sin incluirla.

Por ejemplo, si rake db:migrate:status inicialmente muestra:

(... some older migrations ...) up 20181001002039 Some migration description up 20181002222222 Some migration description up 20181003171932 Some migration description up 20181004211151 Some migration description up 20181005151403 Some migration description

Corriendo:

rake db:migrate VERSION=20181002222222

Resultará en:

(... some older migrations ...) up 20181001002039 Some migration description up 20181002222222 Some migration description down 20181003171932 Some migration description down 20181004211151 Some migration description down 20181005151403 Some migration description

Referencia: https://makandracards.com/makandra/845-migrate-or-revert-only-some-migrations


Para revertir la última migración puede hacer:

rake db:rollback

Si desea deshacer una migración específica con una versión, debe hacerlo:

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.


Para revertir la última migración puede hacer:

rake db:rollback

Si desea deshacer una migración específica con una versión, debe hacerlo:

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 , 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


Reversión de la última migración:

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

Retroceder 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

Deshacer 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 desea revertir y migrar puede ejecutar:

rake db:migrate:redo

Eso es lo mismo que

rake db:rollback rake db:migrate


Si es 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 rollback será rake db:migrate:down VERSION=20140716084539


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

Pero, de acuerdo con su requerimiento, la sintaxis ha cambiado.

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

rake db:rollback

o

rake db:rollback STEP=1

Si desea revertir el número de migraciones en una sola vez, simplemente pase el argumento

rake db:rollback STEP=n

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

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

rake db:migrate:down VERSION=xxxxx

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


rake db:migrate:down VERSION=your_migrations''s_version_number_here

La versión es el prefijo numérico en el nombre de 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 que desea restaurar y copie el número de prefijo.

por ejemplo

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


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 revertir.

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


rake db:rollback STEP=1

Es una forma de hacerlo, si la migración que desea revertir es la última aplicada. Puede sustituir 1 por las migraciones por las que desee 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