Доктрина 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) есть ошибка

0 ответов

Другие вопросы по тегам