Мне очень любопытно, как люди запускают такую команду, как 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:
Кстати, мне нужно было закрыть pgAdminIII, который я использовал для проверки базы данных RDS. Поскольку я был подключен, это блокирует базу данных и предотвращает последний шаг.
У меня также было RAILS_SKIP_MIGRATIONS, установленное на TRUE в консоли EB (в разделе Configuration> Software). Предположительно, если вы оставите для него значение по умолчанию FALSE, при развертывании будут выполнены все необходимые миграции.
Итак, в ответ на исходный вопрос вы запускаете рельсы db: сброс (или рельсы db: миграция) на сервере приложений. Вы не можете (и не можете) подключиться к серверу RDS по SSH.