Tengo el siguiente archivo de migración db\migrate\20100905201547_create_blocks.rb
¿Cómo puedo deshacer específicamente ese archivo de migración?
Tengo el siguiente archivo de migración db\migrate\20100905201547_create_blocks.rb
¿Cómo puedo deshacer específicamente ese archivo de migración?
Respuestas:
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 la cantidad de migraciones 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).
Para revertir todas las migraciones (e incluir) una migración de destino, use: (Este comando corregido se agregó DESPUÉS de todos los comentarios que señalan el error en la publicación original)
rake db:migrate VERSION=20100905201547
Para revertir SOLO UNA migración específica (FUERA DE PEDIDO) use:
rake db:migrate:down VERSION=20100905201547
Tenga en cuenta que esto NO revertirá las migraciones intercesoras, solo la listada. Si eso no es lo que pretendía, puede ejecutarlo de manera segura rake db:migrate
y volverá a ejecutar solo ese, omitiendo cualquier otro que no haya sido revertido anteriormente.
Y si alguna vez desea migrar una única migración fuera de servicio, también existe su inverso db:migrate:up
:
rake db:migrate:up VERSION=20100905201547
STEP=-1
. Lo hice una vez y se volvió loco, haciendo retroceder todo. ¡No está bien! Esto era Rails 4.2. Supongo que puede estar solucionado por ahora.
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 del archivo de la migración es la versión que necesita revertir.
Consulte la entrada de la guía Ruby on Rails sobre migraciones.
Para revertir la última migración, puede hacer:
rake db:rollback
Si desea revertir 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á:
rake db:migrate:down VERSION=20141201122027
para revertir esa migración específica.
Puede revertir su migración utilizando rake db:rollback
diferentes opciones. La sintaxis será diferente según sus requisitos.
Si desea deshacer solo la última migración, puede usar cualquiera
rake db:rollback
o
rake db:rollback STEP=1
Si desea revertir el número de migraciones a la vez, simplemente pase un argumento:
rake db:rollback STEP=n
donde n
es el número de migraciones para revertir, contando desde la última migración.
Si desea revertir a una migración específica, debe pasar la versión de la migración de la siguiente manera:
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 del 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
directorio. Encuentre el archivo apropiado hasta el que desea revertir y copie el número de prefijo.
por ejemplo
nombre del archivo: 20140208031131_create_roles.rb
entonces la versión es20140208031131
rake db:migrate:status
Revertir la última migración:
# rails < 5.0
rake db:rollback
# rails >= 5.0
rake db:rollback
# or
rails db:rollback
Revertir 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
Para revertir la última migración, puede hacer:
rake db:rollback
Si desea revertir una migración específica con una versión, debe hacer lo siguiente:
rake db:migrate:down VERSION=YOUR_MIGRATION_VERSION
Si se llamó al archivo de migración que desea revertir db/migrate/20141201122027_create_some_table.rb
, entonces la VERSIÓN para esa migración es 20141201122027
, que es la marca de tiempo de cuándo se creó esa migración, y el comando para revertir esa migración sería:
rake db:migrate:down VERSION=20141201122027
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 anterior a la versión actual, esto revertirá todas las migraciones hasta, pero sin incluir, la versión especificada.
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
De la guía de rieles
Puede usar la capacidad de Active Record para revertir las migraciones utilizando el revert
método:
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 revert
método 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 usar 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 mediante revertir.
Las migraciones cambian el estado de la base de datos con 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 adivinar, la sustitución de cualquier otro número por 0 migra a ese número de versión, donde los números de versión provienen de enumerar las migraciones secuencialmente
Bueno, en rails 5 es bastante fácil rake db: migrate: status o rails db: migrate: status
Se modificó para manejar ambos 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 la VERSIÓN sea mayúscula
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 migraron.
Espero que ayude
Class.down
stackoverflow.com/questions/753919/run-a-single-migration-file