Ruby on Rails: ¿Cómo puedo revertir una migración con rake db: migrate?


94

Después de instalar devise MODEL User obtuve esto.

class DeviseCreateUsers < ActiveRecord::Migration
  def self.up
    create_table(:users) do |t|
      t.database_authenticatable :null => false
      t.recoverable
      t.rememberable
      t.trackable

      # t.encryptable
      # t.confirmable
      # t.lockable :lock_strategy => :failed_attempts, :unlock_strategy => :both
      # t.token_authenticatable


      t.timestamps
    end

    add_index :users, :email,                :unique => true
    add_index :users, :reset_password_token, :unique => true
    # add_index :users, :confirmation_token,   :unique => true
    # add_index :users, :unlock_token,         :unique => true
    # add_index :users, :authentication_token, :unique => true
  end

  def self.down
    drop_table :users
  end
end

Ahora, si hago rake db: migrate, se creará la tabla de usuarios.

¿Cómo puedo revertir esta migración, es decir, cómo puedo eliminar la tabla de usuarios usando rake nuevamente?

Respuestas:


147

Ejecute el siguiente comando

rake db:migrate:down VERSION=<version>

donde <version>es el número de versión de su archivo de migración que desea revertir.

p.ej. si desea revertir una migración con el nombre de archivo 3846656238_create_users.rb

rake db: migrate: down VERSION = 3846656238


Recibo un mensaje, UnknownMigrationVersionErrorpero me di cuenta de que es porque mis migraciones están adentro db/migrate/main, ¿alguien sabe una solución para que esto pueda db:migrate:downver dentro de ese directorio específico o los subdirectorios de migración?
tf.rz

Esto es solo para los rieles 3 en adelante. Mi vida está en raíles 2. Muy triste
morhook

@morhook Esto también funciona para rieles 3. Consulte los documentos aquí guides.rubyonrails.org/v3.2/migrations.html
Mahesh

¡Tienes razón! Funciona tanto para los rieles 2 como para los rieles 3. ¡Gracias @Mahesh por tu aporte!
morhook


65

Creo que hay tres opciones disponibles para revertir las migraciones (también se superponen):

  1. Despliegue la migración más reciente :

    rake db:migrate:down # Solo rieles 2.

  2. Despliegue hacia abajo un número (n) de migraciones recientes:

    rake db:rollback STEP=n

  3. Desplácese hacia abajo a una versión específica anterior :

    $ rake db:migrate:down VERSION=nnn # Rails 3 (proporcione también el número de versión).

Número de versión significa SHA (algoritmo hash seguro) para la confirmación, que es un número hexadecimal largo que se parece a 886af3194768917c78e ... Puede verlo haciendo git log

Puede ver estos comandos (y otros) con sus descripciones usando rake -T db:que para rails 3.2 incluye:

rake db:migrate         # Migrate the database (options: VERSION=x, VERBOSE=false)
rake db:migrate:status  # Display status of migrations
rake db:rollback        # Rolls the schema back to the previous version (specify steps w/ STEP=n)

5
rake db:migrate VERSION=<version number>
Desplácese

3
Al menos para rails 3.0.20, el primer comando es incorrecto. Un único rake db:migrate:downaborto con el mensaje de error "Se requiere VERSIÓN". Sin embargo, lo recomendado rake db:rollback funciona.
martin

Como se detalla en la respuesta, Rails 2 SOLO para el primer comando.
Michael Durrant

1
Las variables de entorno distinguen entre mayúsculas y minúsculas, por lo que debería serlo STEPyVERSION
Kostas Rousis

Para aclarar, $ rake db:migrate:down VERSION=nnnno se reduce a una versión, se migra a la versión especificada.
johnml

15

Puede revertir y especificar cuántas últimas migraciones se revertirán, p. Ej.

rake db:rollback STEP=3

para 3 últimas migraciones.


esta es una forma más rápida y fácil, en lugar de buscar los números de versión si desea deshacer las últimas migraciones
Pre-alpha

11

Como programador nuevo (o para otros programadores nuevos)

rake db:rollbackfunciona aproximadamente la mitad del tiempo. Empiezo por ahí.

Si no, rake db:migrate:down VERSION=3846656238

inserte VERSION para el número de versión de su archivo de migración que desea revertir.


10
rake db:migrate:redo

Deshacerá y volverá a aplicar la última migración.


5

Para rieles 5 podemos usar rails command instead of rake

rails db:migrate:down VERSION=<version>

ejemplo

rails db: migrate: down VERSION = 20170330090327


2

Ejecute este comando en su terminal:

rake db:migrate:status

o

bundle exec rake db:migrate:status

Muestra el estado, los ID de migración y el nombre de la migración de todas las migraciones que ejecutamos anteriormente. seleccione su ID de migración (es decir, su número de versión) y coloque ese ID en el siguiente comando después de version = ,,, y presione enter

bundle exec rake db:migrate:down VERSION=

0

Cómo revertir una migración

(1) Primero identifique el ID de migración

rake db:migrate:status

  • Copie el número de identificación.

Identifique la migración para revertir.

(2) Luego, revertir la migración

rake db:migrate:down VERSION=20190802023239

  • Pegue el número de identificación correspondiente arriba. Por supuesto, en su caso, el ID de migración será diferente. Utilice el ID de migración correcto.

....... y ahora te vas a las carreras!

Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.