Rails Git проблема миграции с филиалами - PullRequest
0 голосов
/ 31 января 2019

Все еще новичок.Я работаю над новой функцией для приложения RoR.Я создал местный филиал и произвел миграцию.К сожалению, я не сохранил свои изменения в файле миграции, а затем запустил db: migrate.Желая начать все сначала, я переключился обратно на master и оттолкнулся от своего git и сделал полный сброс с помощью следующих команд (я никогда не фиксировал файлы в ветке ни локально, ни удаленно):

git fetch --all
git reset --hard origin/master

I тогдапеределал локальную ветку, пересоздал миграцию (на этот раз правильно) и запустил db: migrate.Я получаю сообщение об ошибке, что таблица уже существует в базе данных, однако, когда я смотрю в schema.db, таблицы там нет.

Все, что я хочу, - вернуться туда, где я был основан на удаленном git.Для этого стоит использовать Cloud9 на AWS для разработки.Спасибо!

1 Ответ

0 голосов
/ 31 января 2019

При внесении изменений в git нет ничего общего с базой данных.Как только вы запустите задачу rake, например, rake db:migrate, чтобы внести изменения в базу данных, она будет автоматически отменена после того, как вы измените ветку. Вам нужно подготовить шаги отката.(Поскольку методы миграции в миграциях выполняются условно)

Ваша старая версия миграции отличалась от новой воссозданной миграции, поэтому приложение пыталось запустить файл миграции, не проверяя, существует ли таблица.

При каждом запуске rake db:migrate для конкретной базы данных, он хранит версию миграции в вашей таблице schema_migrations в дБ.Таким образом, при повторном вызове одни и те же грабли не будут пытаться создать таблицу с тем же именем.В приведенном выше случае у вас есть разные файлы миграции для создания одной и той же таблицы, а таблица schema_migration не знает, удалили ли вы ветку со старым файлом миграции или таблица уже существует

Так что запустите следующую команду в вашей консоли rails,

ActiveRecord::Migration.drop_table :table_name

А затем запустите свой rake db:migrate

...