Подтвердить что ты не робот

Кэш Symfony 2.7: команда clear проверяет каждое подключение к базе данных

Я только что обновился до symfony 2.7 и получил раздражающее поведение.

Некоторые подключения в моем config.yml являются необязательными и описывают внешние базы данных, которые не предназначены для использования в каждом экземпляре prod.

Когда вы делаете кеш: ясно, кажется, что теперь все соединения проверяются, даже если я не хочу, чтобы они были активны на определенном сервере.

При настройке опции -no-warmup проблема возникает в течение половины времени

php app/console cache:clear --env=prod --no-warmup --verbose

[Учение\DBAL\Exception\ConnectionException]
В драйвере возникло исключение: SQLSTATE [42000] [1049] Неизвестно база данных 'bal_syncrho_database'

Трассировка исключения:() при /var/www/ror 3/vendor/doctrine/dbal/lib/Doctrine/DBAL/Driver/AbstractMySQLDriver.php:103 Doctrine\DBAL\Driver\AbstractMySQLDriver- > convertException() в /var/www/ror 3/vendor/doctrine/dbal/lib/Doctrine/DBAL/DBALException.php:133 Doctrine\DBAL\DBALException:: driverException() в /var/www/ror 3/vendor/doctrine/dbal/lib/Doctrine/DBAL/Driver/PDOMySql/Driver.php:47 Doctrine\DBAL\Driver\PDOMySql\Driver- > connect() в /var/www/ror 3/vendor/doctrine/dbal/lib/Doctrine/DBAL/Connection.php:360 Doctrine\DBAL\Connection- > connect() в /var/www/ror 3/vendor/doctrine/dbal/lib/Doctrine/DBAL/Connection.php:429 Doctrine\DBAL\Connection- > getDatabasePlatformVersion() в /var/www/ror 3/vendor/doctrine/dbal/lib/Doctrine/DBAL/Connection.php:389 Doctrine\DBAL\Connection- > detectDatabasePlatform() в /var/www/ror 3/vendor/doctrine/dbal/lib/Doctrine/DBAL/Connection.php:328 Doctrine\DBAL\Connection- > getDatabasePlatform() в /var/www/ror 3/vendor/doctrine/orm/lib/Doctrine/ORM/Mapping/ClassMetadataFactory.php:763 Doctrine\ORM\Mapping\ClassMetadataFactory- > getTargetPlatform() в /var/www/ror 3/vendor/doctrine/orm/lib/Doctrine/ORM/Mapping/ClassMetadataFactory.php:616 Учение \ORM\Mapping\ClassMetadataFactory- > completeIdGeneratorMapping() в /var/www/ror 3/vendor/doctrine/orm/lib/Doctrine/ORM/Mapping/ClassMetadataFactory.php:174 Doctrine\ORM\Mapping\ClassMetadataFactory- > doLoadMetadata() в /var/www/ror 3/vendor/doctrine/common/lib/Doctrine/Common/Persistence/Mapping/AbstractClassMetadataFactory.php:332 Доктрина\Common\Постоянство\Mapping\AbstractClassMetadataFactory- > loadMetadata() в /var/www/ror 3/vendor/doctrine/orm/lib/Doctrine/ORM/Mapping/ClassMetadataFactory.php:78 Doctrine\ORM\Mapping\ClassMetadataFactory- > loadMetadata() в /var/www/ror 3/vendor/doctrine/common/lib/Doctrine/Common/Persistence/Mapping/AbstractClassMetadataFactory.php:216 Доктрина\Common\Постоянство\Mapping\AbstractClassMetadataFactory- > getMetadataFor() в /var/www/ror 3/vendor/doctrine/common/lib/Doctrine/Common/Persistence/Mapping/AbstractClassMetadataFactory.php:115 Доктрина\Common\Постоянство\Mapping\AbstractClassMetadataFactory- > getAllMetadata() в /var/www/ror 3/vendor/symfony/symfony/src/Symfony/Bridge/Doctrine/CacheWarmer/ProxyCacheWarmer.php:69 Symfony\Bridge\Doctrine\CacheWarmer\ProxyCacheWarmer- > warmUp() в /var/www/ror 3/vendor/symfony/symfony/src/Symfony/Component/HttpKernel/CacheWarmer/CacheWarmerAggregate.php:48 Symfony\Component\HttpKernel\CacheWarmer\CacheWarmerAggregate- > Разминка() на /var/www/ror 3/app/bootstrap.php.cache:2641 Symfony\Component\HttpKernel\Kernel- > initializeContainer() в /var/www/ror 3/app/bootstrap.php.cache:2411 Symfony\Component\HttpKernel\Kernel- > boot() в /var/www/ror 3/vendor/symfony/symfony/src/Symfony/Bundle/FrameworkBundle/Console/Application.php:70 Symfony\Bundle\FrameworkBundle\Console\Application- > doRun() в /var/www/ror 3/vendor/symfony/symfony/src/Symfony/Component/Console/Application.php:120 Symfony\Component\Console\Application- > run() на
/Вар/WWW/ror3/приложение/консоль: 27

4b9b3361

Ответ 1

Doctrine пытается определить версию платформы базы данных.

Вы можете избежать этого поведения, добавив в конфигурацию DBal Configuration версию сервера. Из документа:

Параметр server_version был добавлен в Doctrine DBAL 2.5, который используется DoctrineBundle 1.3. Значение этого параметра должно соответствовать вашему версия сервера базы данных (используйте команду postgres -V или psql -V, чтобы найти вашу версию PostgreSQL и mysql -V для получения вашей версии MySQL).

Если вы не определяете этот параметр и еще не создали свою базу данных, вы можете получить ошибки PDOException, потому что Doctrine будет попытайтесь угадать версию сервера базы данных автоматически, и нет доступны.

В качестве примера:

#config.yml

doctrine:
    dbal:
    ...
        server_version:       5.6

Надеемся на эту помощь