Рейк-задачи и миграция на Heroku без простоев - PullRequest
0 голосов
/ 19 сентября 2019

Контекст

Я использую Heroku для обслуживания моего rails API (v5.2) с базой данных PostgreSQL,

Часто после некоторых миграций я имеювручную запустить некоторые конкретные задачи rake.

Эти задачи rake обычно удаляют все строки таблицы перед тем, как воссоздать их с другими данными.

Это проблематично для меня, потому что это создает время простоя в течение примерно,20 минут, два раза в неделю (путем включения и выключения Режим обслуживания ).

Проблема

Я бы хотел избежать простоев между миграциями.

Предполагаемое решение

, для этого я планировал использовать Предварительную загрузку Heroku наряду с выпуском задач фазы .

После активации preboot для моего приложения я добавлю скрипт в мой Procfile

release: ./release-tasks.sh

И в файл release-tasks.sh что-то вроде:

heroku run rake my_rake_task --app myApp

Вопросы

  • Это хорошее / нормальное решение?

  • Уверен ли, что на этапе миграции пользователи будутбыть в состоянии запросить «старую» базу данных, прежде чем новая станет действующей?

  • Есть ли способ активировать сценарии выпуска по требованию?(например, используя env var в Heroku? - он мне не понадобится для каждой миграции).

1 Ответ

1 голос
/ 19 сентября 2019

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

Это не предотвратит простои в вашем конкретном случае.Фаза выпуска не запускает новую базу данных с каждым выпуском.Он просто запускает одноразовый dyno с вашей командой.

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

...