Доктрина MasterSlaveConnection с пустыми env-vars
# doctrine.yaml
parameters:
# Adds a fallback DATABASE_URL if the env var is not set.
# This allows you to run cache:warmup even if your
# environment variables are not available yet.
# You should not need to change this value.
env(DATABASE_MASTER_URL): ''
env(DATABASE_SLAVE1_URL): ''
doctrine:
dbal:
default_connection: default
connections:
default:
driver: pdo_mysql
url: '%env(resolve:DATABASE_MASTER_URL)%'
server_version: '5.7'
charset: utf8mb4
default_table_options:
charset: utf8mb4
collate: utf8mb4_unicode_ci
slaves:
slave1:
url: '%env(resolve:DATABASE_MASTER_URL)%'
charset: utf8mb4
Когда я бегу php bin/console cache:clear
я получаю эту ошибку:
The options 'driver' or 'driverClass' are mandatory if no PDO instance is given to DriverManager::getConnection().
Это происходит, когда мы не перезаписали env vars DATABASE_MASTER_URL
& DATABASE_SLAVE1_URL
. На этапе нашего конвейера gitlab, где этих значений нет под рукой, нам нужно очистить / прогреть кеш.
Вот что забавно: если я удалю определение рабов, все будет работать нормально. Это происходит только в сценарии, в котором мы определяем подчиненных.
ДОПОЛНИТЕЛЬНАЯ ИНФОРМАЦИЯ 1 Класс WrapperClass "MasterSlaveConnection" делает именно то, что нужно, но только с опозданием. Берет "драйвер" из конфига и вставляет его вmaster
и slave
узлы.
Но это происходит ПОСЛЕ DriverManager::parseDatabaseUrlScheme
называется.
Так что либо 1) я здесь делаю что-то не так и документацию можно улучшить, либо 2) есть ошибка