# 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 DATABASE_MASTER_URL
& DATABASE_SLAVE1_URL
. На шаге нашего конвейера gitlab, где нет этих значений, нам нужно очистить / прогреть кеш.
Самое забавное здесь: если я удалю определение для рабов, все будет работать нормально , Это происходит только в сценарии, в котором мы определяем ведомых.
ДОПОЛНИТЕЛЬНАЯ ИНФОРМАЦИЯ 1 WrapperClass "MasterSlaveConnection" делает именно то, что нужно, но только до поздна. Он берет «драйвер» из конфига и внедряет его в master
и slave
узлы.
Но это происходит ПОСЛЕ вызова DriverManager::parseDatabaseUrlScheme
.
Так что либо 1) я делаю что-то не так, и есть место для улучшения документации, либо 2) есть ошибка