Могу ли я вручную создавать миграции для производства в Heroku, Ruby on Rails? - PullRequest
0 голосов
/ 17 июня 2020

Я создал приложение с Ruby и Rails. Дело в том, что когда я его разрабатывал, у меня были проблемы с миграциями, потому что я их создавал, но с неправильным синтаксисом. Случилось так, что я удалил некоторые файлы, потому что проданные миграции, которые не работали, имели то же имя, что и новые, но в середине этого я случайно удалил некоторые миграции (очевидно, после запуска rails db: migrate), которые проект использует собственно. Так, например, у меня есть таблица Service, которая связана с таблицей Reservation, потому что Service имеет Reserve_id, но у меня нет файла миграции с надписью AddReservationIdToService.

Итак, теперь я хочу использовать Heroku для производства. дело в том, что O нужно изменить на postgresql, потому что Heroku не поддерживает sqlite. Поэтому мне нужно снова запустить de: migrate, чтобы создать таблицы и отношения в новой БД, но мне нужны файлы, которые я удалил, как я объяснил. Возникает вопрос:

Могу ли я создать миграции вручную, чтобы при запуске db: migrate для postgres вся структура базы данных была создана без отсутствия связей?

Ответы [ 2 ]

2 голосов
/ 17 июня 2020

На самом деле вам не нужны миграции для воссоздания существующей БД - на самом деле не рекомендуется пытаться по нескольким причинам (включая проблему с отсутствующим файлом миграции, с которым вы столкнулись). Вы можете просто запустить:

bin/rails db:schema:load

, чтобы заполнить новую базу данных из существующей схемы. Если по какой-то причине у вас не проверен db / schema.rb в системе контроля версий, вы можете запустить:

bin/rails db:schema:dump

для версии sqlite, чтобы воссоздать файл схемы fre sh из базы данных .

Вы также можете поддерживать порядок в списке миграций, время от времени удаляя действительно старые миграции, поскольку все кумулятивные изменения фиксируются в файле схемы.

1 голос
/ 17 июня 2020

Да, вы можете создать еще пару файлов миграции. Подтвердите, что теперь у вас есть таблицы, которые вы sh локально используете с помощью sqlite. Нарисуйте эту таблицу на листе бумаги (или там, где она будет лучше для вас), затем проверьте эту официальную документацию API Rails .

Удалите все миграции, сделанные ранее, и создайте другую в соответствии с таблицы, которые вы нарисовали.

Рабочий процесс будет примерно таким:

1) «Мне нужно создать таблицу под названием Reservation, где она отображается в документации?»

2) «Мне нужна таблица с именем« Служба », где она показана в документации?

3)« Мне нужно добавить столбец с внешним ключом в службу с именем reservaton_id, как об этом говорится в документации?

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

Главное отличие здесь не в том, чтобы запускать миграцию локально. Вместо этого, pu sh ваше приложение новой версии в удаленной ветке heroku и там вы запускаете миграцию, например:

heroku run rails db:migrate

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

Последние два совета:

1) Если ваша миграция не go, как вы ожидаете, не удаляйте миграцию файл. Вместо этого запустите rails db:rollback и повторите попытку.

2) Продолжайте отслеживать файлы миграции в той же ветке вашего контроля версий.

...