Rails: удаление ожидающей миграции

В настоящее время я следую руководству ruby ​​on rails: http://guides.rubyonrails.org/getting_started.html.

Я пытаюсь сохранить данные в базе данных. Однако, когда я запускаю: rails server, я получаю следующую ошибку:

Migrations are pending. To resolve this issue, run: bin/rake db:migrate RAILS_ENV=development

Я просмотрел другие статьи и когда я запустил:

bin/rake db:migrate 

Я получаю rake aborted!

После запуска:

rake db:abort_if_pending_migrations....

Я вижу, что:

You have 1 pending migration:
20150805200129 CreateDatabases

SQLite3::SQLException: table "databases" already exists:

и он просто подсказывает мне запустить rake db: migrate, чтобы начать заново.

кажется, что он уже существует, есть ли способ отменить ожидающую миграцию?

Ответ 1

Возможно, миграция завершилась неудачей (так что она создала таблицу, но не закончилась).

Вы просто используете среду разработки, поэтому просто удалите базу данных и перестройте ее с нуля:

rake db:drop
rake db:create
rake db:migrate

Ответ 2

Иногда даже отказ от базы данных локального развития - это не очень хорошая идея. Существуют лучшие способы удаления/уничтожения определенной миграции в приложении Rails.

Вы можете использовать команду rails d migration для уничтожения определенной миграции:

rails d migration MigrationName

Чтобы отменить изменения, соответствующие конкретной миграции, вы можете использовать метод db:migrate:down следующим образом:

rake db:migrate:down VERSION=XXX

Иногда ситуация может стать более беспорядочной, и в этой ситуации еще одна полезная вещь - взглянуть на таблицу schema_migrations в вашей базе данных, в которой есть все миграции с сохраненными в ней version.

Вы можете удалить конкретную миграцию из этой таблицы следующим образом:

delete from schema_migrations WHERE version = VERSION;

если вы не хотите, чтобы миграция присутствовала больше.

Ответ 3

Если вы похожи на меня и поддерживаете структуру базы данных за пределами Rails, вы можете просто удалить файл миграции из db/migration. Я получил ошибку в вопросе OP, когда я использовал команду rails generate для создания класса модели, забыв, что он также создает файл миграции.

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

Я постоянно обновляю свой файл структуры Rails, создавая его из базы данных, используя:

bundle exec rake db:structure:dump

Ответ 4

Если вы хотите вернуть неверные миграции, вы можете удалить весь db, используя это:

rake db:drop

Затем удалите файл миграции вручную (это не повредит db при воссоздании, так как миграция схемы также будет удалена).

Затем запустите

rake db:migrate

И если есть данные для посева, тогда запустите это также

rake db:setup