Ответ 1
Возможно, миграция завершилась неудачей (так что она создала таблицу, но не закончилась).
Вы просто используете среду разработки, поэтому просто удалите базу данных и перестройте ее с нуля:
rake db:drop
rake db:create
rake db:migrate
В настоящее время я следую руководству 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, чтобы начать заново.
кажется, что он уже существует, есть ли способ отменить ожидающую миграцию?
Возможно, миграция завершилась неудачей (так что она создала таблицу, но не закончилась).
Вы просто используете среду разработки, поэтому просто удалите базу данных и перестройте ее с нуля:
rake db:drop
rake db:create
rake db:migrate
Иногда даже отказ от базы данных локального развития - это не очень хорошая идея. Существуют лучшие способы удаления/уничтожения определенной миграции в приложении 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;
если вы не хотите, чтобы миграция присутствовала больше.
Если вы похожи на меня и поддерживаете структуру базы данных за пределами Rails, вы можете просто удалить файл миграции из db/migration. Я получил ошибку в вопросе OP, когда я использовал команду rails generate для создания класса модели, забыв, что он также создает файл миграции.
Не используйте этот метод, если вы полагаетесь на Rails для поддержки своей структуры базы данных!
Я постоянно обновляю свой файл структуры Rails, создавая его из базы данных, используя:
bundle exec rake db:structure:dump
Если вы хотите вернуть неверные миграции, вы можете удалить весь db, используя это:
rake db:drop
Затем удалите файл миграции вручную (это не повредит db при воссоздании, так как миграция схемы также будет удалена).
Затем запустите
rake db:migrate
И если есть данные для посева, тогда запустите это также
rake db:setup