EC2: миграции Laravel выполняются столько раз, сколько экземпляров - PullRequest
0 голосов
/ 13 ноября 2018

У нас сейчас очень странная проблема. В нашем техническом стеке используются AWS Elastic Beanstalk, EC2 и Laravel, развертывающие код с помощью конвейеров Bitbucket.

Проблема в том, что всякий раз, когда мы включаем миграцию в развертывание, она запускается дважды (столько раз, сколько наших экземпляров EC2 в этой среде!).

Наши скрипты находятся в .ebextensions dir:

option_settings:
  "aws:elasticbeanstalk:container:php:phpini":
    document_root: /public
container_commands:
    01initdb:
        command: "php artisan migrate"

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

Кто-нибудь видел эту проблему раньше?

Обновление Мы придумали эту реализацию, так как соединение MySQL отклоняется, если мы добавим php artisan migrate в скрипте сборки.

1 Ответ

0 голосов
/ 13 ноября 2018

Есть много способов сделать это:

  1. Один сервер ops должен запускать все задачи, которые нужно запустить только на 1 сервере.Ваш конвейер bitbucket может запускать этот ops-сервер для задач с одним сервером, а другие - для многосерверных задач.
  2. Создайте пользовательскую команду Artisan, которая получает блокировки (БД или кэш) для запуска миграций, избегая при этом условий параллельного запуска / гонки..
  3. Запускать последовательные развертывания (не знаю, возможно ли это в Beanstalk).
  4. Как упоминалось в OP, установка флага leader_only: true в сценариях Elastic Beanstalk позволяет запускать команду только в одном экземпляре.делает трюк!
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...