Как Heroku запускает Evolutions только один раз с несколькими веб-серверами?
Evolutions - это механизм воспроизведения по умолчанию для обновлений схемы БД.
Если я добавлю игровую версию в настройку Heroku, которая содержит более одного веб-сервера, - как герою узнает, что запускает эволюции только один раз?
На самом деле - более общий (связанный?) Вопрос - каков порядок запуска, если я отправляю версию на установку с N веб-серверами? Heroku запускает их по одному?
2 ответа
Документация описывает, как это работает. Если вы используете Postgres или Oracle, система может блокировать таблицы таким образом, чтобы обеспечить эволюцию только один сервер.
Если вы используете любую другую базу данных, вы ДОЛЖНЫ отключить эволюцию в производственном процессе, иначе у вас будет много проблем.
Heroku по умолчанию использует PostgreSQL (если вы включите их БД), что означает, что безопасно развертывать ваше приложение одновременно на нескольких узлах с включенными эволюциями, Play позаботится об этом.
Если ваше приложение работает на нескольких хостах, вы должны установить свойство config evolutions.use.locks=true. Если это свойство установлено, блокировки базы данных используются, чтобы гарантировать, что только один хост применяет любые Эволюции.
Я не знаю много о Evolutions, но я предполагаю, что это стандартный инструмент миграции, в котором он проверяет текущую версию миграции схемы БД, а затем запускает ожидающие миграции?
Так ли это, даже если это запускается при запуске приложения, или что-то еще, и запускается несколько раз, только один из этих процессов действительно внесет изменения?