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

Я только что обновился до Symfony 2.7, и меня раздражает поведение.

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

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

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

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

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

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

1 ответ

Решение

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

Вы можете избежать этого, добавив в 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

Надеюсь это поможет

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