На ранере запускается чистый инстанс скелетона, в котором отсутствуют какие либо миграции.
Миграции запускаются в режиме --allow-no-migration.
Импорт БД происходит через compose.
Данные в БД заранее сгенерированы через faker, поэтом сам по себе дамп достаточно увесистый. Импорт происходит где то минуты 2-3.
В данный момент использую в цикле проверку на healthy контейнера, но понятное дело это не дает никакой гарантии того, что БД импортировалась.
Принудительно выставляю в переменную количество секунд ожидания для sleep перед попыткой запуска миграции.
Ошибка
Если БД не успевает импортироваться, в doctrine получаю эксепшн о невозможности создать запись в таблице migrations и соответственно CI отваливается.
Как грамотно обойти этот момент при условии импорта БД через compose, а не через doctrine?
Выполнять подключение к sql через консоль не особо хочется.
Можно вместо проверки на healthy в дампе последней записью вставлять "запись-маячок" и проверять в цикле ее существование. Если под "консолью" вы имеете ввиду клиент mysql, то можно обойтись и без него. В проекте на symfony например `./bin/console doctrine:query:sql`
Нет не симфони. Просто пользуюсь отдельно пакетом migrations. В entitymanager можно через doctrine:database импортировать но мне это не подходит.
Можно вместо проверки на healthy в дампе последней записью вставлять "запись-маячок"
Тогда необходимо каким то образом из цикла в bash так или иначе подключаться к БД. А это все равно получается использование mysql в консоли или вытаскивание пароля из env, либо из my.cnf. Это то же не очень все классно. Должна ведь быть какая то утилита не на php, или какой образ init-replica для импорта бд, который смог бы параллельно запускаться, проверять завершение импорта и прерывать цикл, я так и не смог нагуглить ничего.
В make прописано ожидание healthy. И как только контейнер ожил, выполняется migrationsLmigrate. Сейчас у меня стоит принудительный sleep на 120с, примерно столько занимается импорт sql файла. Если файл не успел импортироваться и запускается миграция, получаю connection refused, я так понимаю потому что база заблочена в момент импорта.