Ruby on Rails:как я могу отменить миграцию с помощью rake db: migrate?

после установки devise MODEL User я получил это.

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

теперь, если я сделаю rake db: миграция таблицы пользователей будет создана.

Как я могу отменить эту миграцию, т. е. как я могу удалить таблицу пользователей с помощью rake снова ?

8 ответов


run

rake db:migrate:down VERSION=<version>

здесь <version> - номер версии файла миграции, который вы хотите вернуть.

например. если вы хотите отменить миграцию с именем файла 3846656238_create_users.rb

rake db: migrate: down VERSION=3846656238


просто запустите эту команду:

rake db:rollback

Я считаю, что есть три варианта возврата миграции (они также перекрываются):

  1. опусти последние миграция:

    rake db:migrate:down # Rails 2 только.

  2. скатываются в число(n) последние переносы:

    rake db:rollback STEP=n

  3. скатываются to ранее, конкретные версия:

    $ rake db:migrate:down VERSION=nnn # Rails 3 (также укажите номер версии).

номер версии означает SHA (Безопасный хэш-алгоритм) для фиксации, которая представляет собой длинное шестнадцатеричное число, которое выглядит примерно как 886af3194768917c78e... Вы можете увидеть это делаю git log

вы можете увидеть эти команды (и другие) с их описаниями, используя rake -T db: который для рельсов 3.2 включает:

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)

вы можете сделать откат и указать, сколько последних миграций будет откат, например

rake db:rollback STEP=3

за 3 последних миграций.


как новый программист (или другим новым программистам)

rake db:rollback работает примерно в половине случаев. Я начинаю с этого.

, Если не rake db:migrate:down VERSION=3846656238

plug in VERSION для номера версии файла миграции, который вы хотите вернуть.


rake db:migrate:redo

он отменит и повторно применит последнюю миграцию.


для рельсов 5 мы можем использовать rails command instead of rake

rails db:migrate:down VERSION=<version>

пример

rails db: migrate: down VERSION=20170330090327


выполните эту команду в терминале:

rake db:migrate:status

или

bundle exec rake db:migrate:status

он показывает статус, идентификатор миграции, имя миграции для всей миграции, которую мы выполняли ранее. выберите идентификатор миграции (i.e ваш номер версии) и поместите этот идентификатор в следующую команду после version=,,, и нажмите enter

bundle exec rake db:migrate:down VERSION=