ошибка Миграции не ожидаются; run 'rake db: migrate RAILS_ENV = development' для решения этой проблемы

Я попытался отменить последнюю миграцию:

rake db:rollback

это покажет мне следующее:

==  AddUserIdToPictures: reverting ============================================
-- remove_index(:pictures, {:column=>[:user_id, :visible]})
-> 0.1201s
-- remove_column(:pictures, :user_id, :integer)
-> 0.0127s
==  AddUserIdToPictures: reverted (0.1567s) ===================================

то, если я пытаюсь получить доступ к какой-либо странице, я получаю ошибку:

Migrations are pending; run 'rake db:migrate RAILS_ENV=development' to resolve this issue

но когда я делаю то, что говорит ошибка: rake db: migrate RAILS_ENV = development, он воссоздает то, что я откатывал выше:

==  AddUserIdToPictures: migrating ============================================
-- add_column(:pictures, :user_id, :integer)
-> 0.0300s
-- add_index(:pictures, [:user_id, :visible])
-> 0.1007s
==  AddUserIdToPictures: migrated (0.1310s) ===================================

что здесь не так? следует ли удалить файл миграции, прежде чем запускать команду?

+2
источник поделиться
4 ответа

Если вы откатите миграцию, схема базы данных вернется к предыдущей миграции.

Однако, если вы оставите миграцию внутри папки миграции, Rails предполагает, что миграция должна выполняться и работать не будет, пока вы не перейдете к самой последней схеме.

Если вы хотите отменить схему, вы должны отказаться от миграции. Удалите файл, и Rails не будет жаловаться.

+8
источник

Имейте в виду, что Rails создает таблицу schema_migrations, состоящую из одного столбца с именем "версия", содержащего самую последнюю строку идентификатора миграции схемы. Строка id соответствует строке id в db/schema.rb:

ActiveRecord::Schema.define(version: 20140284052547) do

  # Your model definitions

end

Если строка версии в версии SchemaMigration # не соответствует тому, что находится в db/schema.rb, вы получите исключение "Migrations are pending". Это иногда происходит, если вы устанавливаете новую систему или выполняете чистую установку ОС, а затем восстанавливаете базу данных из файла резервной копии, а также запускаете "rake db: migrate" - строки версии будут не синхронизированы. Способ устранения проблемы состоит в том, чтобы просто вставить новую строку в таблицу schema_migrations со значением, содержащимся в db/schema.rb, - но только это сделайте, если вы уверены, что фактическая база данных соответствует определению схемы в schema.rb:

insert into schema_migrations (version) values ('20140284052547');
+1
источник
другие ответы

Связанные вопросы


Похожие вопросы

попробуйте откат 2 последних миграции: rake db: rollback STEP = 2

0
источник

Попробуйте эту команду для отката, вместо

rake db:rollback

используйте, если вы хотите изменить файл миграции:

rake db:migrate:redo STEP=1

используйте его, если вы хотите удалить стол

rake db:migrate:down VERSION=your_migration_version
0
источник

Посмотрите другие вопросы по метке или Задайте вопрос