Doctrine MasterSlaveConnection с пустыми env-переменными - PullRequest
0 голосов
/ 07 февраля 2020
# 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) есть ошибка

...