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