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:migrate:down
# Rails 2 только. -
скатываются в число(n) последние переносы:
rake db:rollback STEP=n
-
скатываются 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 для номера версии файла миграции, который вы хотите вернуть.
для рельсов 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=