2013-04-12 3 views
3

Итак, в какой-то момент процесса разработки я добавил переход, чтобы добавить столбец в таблицу моих пользователей. В этой колонке добавлен атрибут «доллары». После этого я решил удалить атрибут «доллары», написав удаление миграции. Позднее я случайно удалил первоначальную миграцию, чтобы добавить доллары, поэтому для решения ошибок, которые я получал при запуске db: migrate в моей локальной базе данных SQLite, я также удалил миграцию RemoveDollarsFromUsers.Удаленные миграции Ruby on Rails продолжаются на Heroku

Видимо, это решило проблему, пока я не развернулся к героку. После перезагрузки базы данных с heroku pg:reset DATABASE я побежал heroku run rake db:migrate и получил сообщение об ошибке, что «доллары» не были атрибутом пользователя. Файл журнала показал, что он попытался запустить миграцию RemoveDollarsFromUsers, которую я ранее удалил.

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

Это проблема с git? единственное, что я могу придумать, это то, что git ставит старую версию с миграцией RemoveDollarsFromUsers, иначе как герой может даже знать об этом?

+0

Если вы делаете 'git status', что вы получаете? Вы уверены, что после удаления файла, который вы совершили это удаление? – fmendez

+0

Извините, это мой первый раз, когда я использую этот сайт, и я не могу понять, как это сделать. Когда я запускаю статус git, он в основном дает мне список вещей, которые не были совершены, включая удаление файла, о котором я говорил. Так ясно, что вы на что-то. Однако даже после добавления git. и git commit, он по-прежнему говорит, что эти файлы не были совершены –

+0

Сначала вам нужно нажать на код героку. После нажатия попробуйте сбросить db и затем выполнить миграцию. – jvnill

ответ

3

Таким образом, миграция записывается в таблицу миграции схем и указывает, какой из них следует запускать при запуске rake db:migrate и даже db:reset и db:setup.

Как вы говорите, когда-то это путается, особенно если вы измените LOWER вниз по цепочке. Один простой способ заставить его снова запустить все это - удалить таблицу shchema_migrations (хотя это может быть опасно, если вы находитесь в производственной среде и имеете данные, которые хотите сохранить). Запуск db:migrate теперь будет проходить через все из них, шаг за шагом.

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

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

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