Как удалить файлы миграции в 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 из базы данных. Не очень, но это работает.

Ответ 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