php - Symfony 2.7 缓存 :clear command checks every database connection

标签 php symfony doctrine-orm

我刚刚升级到 symfony 2.7,但有一个烦人的行为。

我的 config.yml 中的一些连接是可选的,并且描述了并非打算在每个 prod 实例中使用的外部数据库。

当执行 cache:clear 时,似乎现在每个连接都被检查了,即使我不希望它们在特定服务器上处于事件状态。

设置--no-warmup 选项时,有一半时间出现问题

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

[Doctrine\DBAL\Exception\ConnectionException]
An exception occured in driver: SQLSTATE[42000] [1049] Unknown database 'bal_syncrho_database'

Exception trace: () at /var/www/ror3/vendor/doctrine/dbal/lib/Doctrine/DBAL/Driver/AbstractMySQLDriver.php:103 Doctrine\DBAL\Driver\AbstractMySQLDriver->convertException() at /var/www/ror3/vendor/doctrine/dbal/lib/Doctrine/DBAL/DBALException.php:133 Doctrine\DBAL\DBALException::driverException() at /var/www/ror3/vendor/doctrine/dbal/lib/Doctrine/DBAL/Driver/PDOMySql/Driver.php:47 Doctrine\DBAL\Driver\PDOMySql\Driver->connect() at /var/www/ror3/vendor/doctrine/dbal/lib/Doctrine/DBAL/Connection.php:360 Doctrine\DBAL\Connection->connect() at /var/www/ror3/vendor/doctrine/dbal/lib/Doctrine/DBAL/Connection.php:429 Doctrine\DBAL\Connection->getDatabasePlatformVersion() at /var/www/ror3/vendor/doctrine/dbal/lib/Doctrine/DBAL/Connection.php:389 Doctrine\DBAL\Connection->detectDatabasePlatform() at /var/www/ror3/vendor/doctrine/dbal/lib/Doctrine/DBAL/Connection.php:328 Doctrine\DBAL\Connection->getDatabasePlatform() at /var/www/ror3/vendor/doctrine/orm/lib/Doctrine/ORM/Mapping/ClassMetadataFactory.php:763 Doctrine\ORM\Mapping\ClassMetadataFactory->getTargetPlatform() at /var/www/ror3/vendor/doctrine/orm/lib/Doctrine/ORM/Mapping/ClassMetadataFactory.php:616 Doctrine\ORM\Mapping\ClassMetadataFactory->completeIdGeneratorMapping() at /var/www/ror3/vendor/doctrine/orm/lib/Doctrine/ORM/Mapping/ClassMetadataFactory.php:174 Doctrine\ORM\Mapping\ClassMetadataFactory->doLoadMetadata() at /var/www/ror3/vendor/doctrine/common/lib/Doctrine/Common/Persistence/Mapping/AbstractClassMetadataFactory.php:332 Doctrine\Common\Persistence\Mapping\AbstractClassMetadataFactory->loadMetadata() at /var/www/ror3/vendor/doctrine/orm/lib/Doctrine/ORM/Mapping/ClassMetadataFactory.php:78 Doctrine\ORM\Mapping\ClassMetadataFactory->loadMetadata() at /var/www/ror3/vendor/doctrine/common/lib/Doctrine/Common/Persistence/Mapping/AbstractClassMetadataFactory.php:216 Doctrine\Common\Persistence\Mapping\AbstractClassMetadataFactory->getMetadataFor() at /var/www/ror3/vendor/doctrine/common/lib/Doctrine/Common/Persistence/Mapping/AbstractClassMetadataFactory.php:115 Doctrine\Common\Persistence\Mapping\AbstractClassMetadataFactory->getAllMetadata() at /var/www/ror3/vendor/symfony/symfony/src/Symfony/Bridge/Doctrine/CacheWarmer/ProxyCacheWarmer.php:69 Symfony\Bridge\Doctrine\CacheWarmer\ProxyCacheWarmer->warmUp() at /var/www/ror3/vendor/symfony/symfony/src/Symfony/Component/HttpKernel/CacheWarmer/CacheWarmerAggregate.php:48 Symfony\Component\HttpKernel\CacheWarmer\CacheWarmerAggregate->warmUp() at /var/www/ror3/app/bootstrap.php.cache:2641 Symfony\Component\HttpKernel\Kernel->initializeContainer() at /var/www/ror3/app/bootstrap.php.cache:2411 Symfony\Component\HttpKernel\Kernel->boot() at /var/www/ror3/vendor/symfony/symfony/src/Symfony/Bundle/FrameworkBundle/Console/Application.php:70 Symfony\Bundle\FrameworkBundle\Console\Application->doRun() at /var/www/ror3/vendor/symfony/symfony/src/Symfony/Component/Console/Application.php:120 Symfony\Component\Console\Application->run() at
/var/www/ror3/app/console:27

最佳答案

Doctrine 正在尝试确定数据库平台版本。

您可以通过添加 Doctrine DBAL Configuration 来避免这种行为。服务器版本。来自文档:

The server_version option was added in Doctrine DBAL 2.5, which is used by DoctrineBundle 1.3. The value of this option should match your database server version (use postgres -V or psql -V command to find your PostgreSQL version and mysql -V to get your MySQL version).

If you don't define this option and you haven't created your database yet, you may get PDOException errors because Doctrine will try to guess the database server version automatically and none is available.

例如:

#config.yml

doctrine:
    dbal:
    ...
        server_version:       5.6

希望有帮助

关于php - Symfony 2.7 缓存 :clear command checks every database connection,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34023813/

相关文章:

php - 尝试调用 类 的名为 "getRequest"的未定义方法。在 SwiftMailer Symfony 中发送电子邮件

Symfony 2 获得实体原则

mysql - 如果 Doctrine 使用 ZF1 和 ZF2 以及 MySql 作为数据库,默认的隔离级别是多少?

java - android应用程序与网站数据库的连接

php - 如何在 PHP 中执行静态代码分析?

php - Doctrine 从实体生成中排除表

symfony表单构建器更新选项字段

php - 如何恢复根节点

php - 使用php和mysql创建csv文件时有文件大小限制吗?

php - 如何从具有 TABLE_NAMES 的 LIKE 子句的语句中获取 mysql 记录