Как удалить файлы миграции в Rails 3
Я хотел бы удалить/удалить файл миграции. Как мне это сделать? Я знаю, что здесь есть похожие вопросы, но как обновление, есть ли лучший способ, чем делать script/destroy?
Также, должен ли я сделать db:reset
или db:drop
, если я удалю/удалю миграцию?
Ответы
Ответ 1
Я обычно:
- Выполните
rake db:migrate VERSION=XXX
во всех средах, до версии, предшествующей той, которую я хочу удалить.
- Удалите файл миграции вручную.
- Если есть ожидающие миграции (т.е. удаленная миграция не была последней), я просто снова выполняю новый
rake db:migrate
.
Если ваше приложение уже создано или организовано, безопаснее просто написать другую миграцию, которая уничтожит вашу таблицу или столбцы.
Еще одна полезная ссылка для миграции: http://guides.rubyonrails.org/migrations.html
Ответ 2
Другой способ удаления переноса:
$ rails d migration SameMigrationNameAsUsedToGenerate
Используйте его перед тем, как rake db:migrate
будет выполняться, потому что изменения в базе данных останутся навсегда:) - или удалите изменения вручную
Ответ 3
Запустите команды из домашней директории приложения:
-
rake db:migrate:down VERSION="20140311142212"
(здесь версия - это метка времени, добавленная рельсами, когда была создана миграция. Это действие вернет изменения БД из-за этой миграции)
-
Run "rails destroy migration migration_name"
(имя миграции используется во время создания миграции. Удалите " timestamp _" из вашего имени файла миграции, чтобы получить его)
Ответ 4
Мы также можем перейти вниз как
rake db:migrate:down VERSION=versionnumber
См
Rubyonrailsguide
Ответ 5
Мы можем использовать
$ rails d migration table_name
Будет удалена миграция.
Ответ 6
Иногда я обнаружил, что удаляю файл миграции, а затем удаляю соответствующую запись в таблице schema_migrations из базы данных. Не очень, но это работает.
Ответ 7
Посмотрите на 4.1 Rolling Back
http://guides.rubyonrails.org/migrations.html
$rake db: rollback
Ответ 8
У меня была такая же проблема:
- rails d migration fuu
- это удалило миграцию с последней отметкой времени
- rails d migration fuu
- это удалило другую миграцию.
- использовать git статус для проверки того, что больше нет в файлах без следа
- rails g migration fuu
Это исправило это для меня
Ответ 9
Ни один из этих ответов не подходит к той проблеме, с которой я столкнулся, поскольку миграция, которую я хотел удалить, отсутствовала:
Я создал и запустил миграцию в другой ветке, которая затем была отброшена. Проблема в том, что при запуске миграции rails добавляет версию в таблицу schema_migrations
в базе данных. Поэтому, даже если он не указан в вашей структуре базы данных или схеме, rails ищет его.
Вы можете выявить эти осиротевшие миграции, выполнив:
rails db:migrate:status
Обратите внимание на версии отсутствующих миграций и перейдите в консоль db:
rails dbconsole
Теперь удалите версии из таблицы миграции вручную:
delete from schema_migrations where version='<version>';
Теперь тебе должно быть хорошо.
Ответ 10
Это также работает в Rails 5.
Если миграция была самой последней, вы можете удалить столбцы базы данных, которые были добавлены, выполнив:
rake db:rollback
затем удалите сам файл миграции, выполнив:
rails d migration WhateverYourMigrationWasNamed.rb
Ответ 11
Примечание:
Начиная с рельсов 5.0.0
rake
был изменен на rails
Так что выполните следующее
rails db: migrate VERSION = 0