2015-08-05 6 views
12

В настоящее время я следую за рубином на рельсах: http://guides.rubyonrails.org/getting_started.html.Rails: Как удалить ожидающую миграцию

Я пытаюсь сохранить данные в базе данных. Однако, когда я бегу: 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, чтобы начать снова.

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

+0

ваш ожидании миграции пытается создать 'databases' таблицу, которая уже существует ... –

ответ

6

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

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

rake db:drop 
rake db:create 
rake db:migrate 
+4

Я думаю, что это опасно предположить, что можно отказаться от разработки db. Я видел разработки, которые требуют достаточно времени для восстановления. – spickermann

+0

Что было так трудно восстановить? ну, вы можете использовать 'rake db: schema: load' вместо' db: migrate', если у вас есть некоторые устаревшие миграции, которые больше не работают – EugZol

+0

Это сработало! Спасибо за понимание! И @spickermann вы правы, к счастью, его можно было заменить за считанные секунды в качестве начального уровня. –

9

Иногда, даже сбросив локальную базу развития не является хорошей идеей. Есть лучшие способы удалить/уничтожить определенную миграцию в приложении 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; 

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

+0

Стоит упомянуть, что эту проблему можно полностью уклонить, используя надлежащую СУБД с транзакциями DDL, такими как Postgres. – EugZol

-1

Если вы хотите вернуть неправильные миграции, вы можете отбросить всю БД с помощью этого:

rake db:drop 

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

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

rake db:migrate 

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

rake db:setup 
+0

Спасибо за ваш вклад! –

1

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

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

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

bundle exec rake db:structure:dump 
+0

Отличное понимание, спасибо! –

Смежные вопросы