Назад | Перейти на главную страницу

Где следует запускать миграции в процессе развертывания elasticbeanstalk?

Мне очень любопытно, как люди запускают такую ​​команду, как db migrate в своих приложениях eb. Если вы добавите его как .ebextensions Я опасаюсь, что когда у вас есть несколько экземпляров для одного приложения, могут возникнуть конфликты, если несколько серверов попытаются выполнить одну и ту же миграцию.

В какой момент в процессе развертывания должен db migrate команда будет запущена?

Вы можете попробовать флаг: leader_only в ebextensions Файл конфигурации. Этот флаг заставит вашу миграцию запускаться только один раз, даже если приложение развернуто во многих экземплярах. Например, сохраните этот файл в корневом каталоге вашего проекта по пути: /.ebextensions/migration.config

option_settings:
container_commands:
    database_migration:
        leader_only: true
        command: "db migrate"

Больше информации: Официальная документация AWS Elastic Beanstalk

Поскольку в OP не указана платформа, я подумал, что добавлю конкретный .ebextensions/migration.config config для Ruby on Rails, так как я также столкнулся с этой проблемой:

container_commands:
  12migrate:
    command: rake db:migrate
    leader_only: true

Эта последовательность работает для меня при развертывании Rails 5.1.4 в Elastic Beanstalk с использованием PostgreSQL:

  1. Разверните свой код в EB. Я использую консоль EB, но вместо этого вы можете использовать интерфейс командной строки.
  2. SSH к серверу приложений EC2
  3. Перейдите в каталог приложения: cd / var / app / current /
  4. db: сбросить

Кстати, мне нужно было закрыть pgAdminIII, который я использовал для проверки базы данных RDS. Поскольку я был подключен, это блокирует базу данных и предотвращает последний шаг.

У меня также было RAILS_SKIP_MIGRATIONS, установленное на TRUE в консоли EB (в разделе Configuration> Software). Предположительно, если вы оставите для него значение по умолчанию FALSE, при развертывании будут выполнены все необходимые миграции.

Итак, в ответ на исходный вопрос вы запускаете рельсы db: сброс (или рельсы db: миграция) на сервере приложений. Вы не можете (и не можете) подключиться к серверу RDS по SSH.