Symfony 2.7 cache:clear 命令检查每个数据库连接 [英] Symfony 2.7 cache:clear command checks every database connection

查看:21
本文介绍了Symfony 2.7 cache:clear 命令检查每个数据库连接的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我刚刚升级到 symfony 2.7,并且有一个烦人的行为.

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

在执行 cache:clear 时,现在似乎检查每个连接,即使我不希望它们在特定服务器上处于活动状态.

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

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

<块引用>

[DoctrineDBALExceptionConnectionException]
驱动程序中发生异常:SQLSTATE[42000] [1049] 未知数据库'bal_syncrho_database'

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

解决方案

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

您可以在Doctrine DBAL 配置中添加来避免这种行为服务器版本.来自文档:

<块引用>

在 Doctrine DBAL 2.5 中添加了 server_version 选项,即DoctrineBundle 1.3 使用.此选项的值应与您的数据库服务器版本(使用 postgres -V 或 psql -V 命令查找您的 PostgreSQL 版本和 mysql -V 以获取您的 MySQL 版本.

如果你没有定义这个选项并且你还没有创建你的数据库,你可能会收到 PDOException 错误,因为 Doctrine 会尝试自动猜测数据库服务器版本,但没有可用.

例如:

#config.yml教义:数据库:...服务器版本:5.6

希望对您有所帮助

I just have upgraded to symfony 2.7, and have a annoying behaviour.

Some connections in my config.yml are optionables, and describe foreign databases that are not intended to be used in every prod instances.

When doing a cache:clear , it seems that now every connections are checked, even if I don't want them to be active on a particular server.

When setting the --no-warmup option, the problem occurs half the time

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

[DoctrineDBALExceptionConnectionException]
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 DoctrineDBALDriverAbstractMySQLDriver->convertException() at /var/www/ror3/vendor/doctrine/dbal/lib/Doctrine/DBAL/DBALException.php:133 DoctrineDBALDBALException::driverException() at /var/www/ror3/vendor/doctrine/dbal/lib/Doctrine/DBAL/Driver/PDOMySql/Driver.php:47 DoctrineDBALDriverPDOMySqlDriver->connect() at /var/www/ror3/vendor/doctrine/dbal/lib/Doctrine/DBAL/Connection.php:360 DoctrineDBALConnection->connect() at /var/www/ror3/vendor/doctrine/dbal/lib/Doctrine/DBAL/Connection.php:429 DoctrineDBALConnection->getDatabasePlatformVersion() at /var/www/ror3/vendor/doctrine/dbal/lib/Doctrine/DBAL/Connection.php:389 DoctrineDBALConnection->detectDatabasePlatform() at /var/www/ror3/vendor/doctrine/dbal/lib/Doctrine/DBAL/Connection.php:328 DoctrineDBALConnection->getDatabasePlatform() at /var/www/ror3/vendor/doctrine/orm/lib/Doctrine/ORM/Mapping/ClassMetadataFactory.php:763 DoctrineORMMappingClassMetadataFactory->getTargetPlatform() at /var/www/ror3/vendor/doctrine/orm/lib/Doctrine/ORM/Mapping/ClassMetadataFactory.php:616 DoctrineORMMappingClassMetadataFactory->completeIdGeneratorMapping() at /var/www/ror3/vendor/doctrine/orm/lib/Doctrine/ORM/Mapping/ClassMetadataFactory.php:174 DoctrineORMMappingClassMetadataFactory->doLoadMetadata() at /var/www/ror3/vendor/doctrine/common/lib/Doctrine/Common/Persistence/Mapping/AbstractClassMetadataFactory.php:332 DoctrineCommonPersistenceMappingAbstractClassMetadataFactory->loadMetadata() at /var/www/ror3/vendor/doctrine/orm/lib/Doctrine/ORM/Mapping/ClassMetadataFactory.php:78 DoctrineORMMappingClassMetadataFactory->loadMetadata() at /var/www/ror3/vendor/doctrine/common/lib/Doctrine/Common/Persistence/Mapping/AbstractClassMetadataFactory.php:216 DoctrineCommonPersistenceMappingAbstractClassMetadataFactory->getMetadataFor() at /var/www/ror3/vendor/doctrine/common/lib/Doctrine/Common/Persistence/Mapping/AbstractClassMetadataFactory.php:115 DoctrineCommonPersistenceMappingAbstractClassMetadataFactory->getAllMetadata() at /var/www/ror3/vendor/symfony/symfony/src/Symfony/Bridge/Doctrine/CacheWarmer/ProxyCacheWarmer.php:69 SymfonyBridgeDoctrineCacheWarmerProxyCacheWarmer->warmUp() at /var/www/ror3/vendor/symfony/symfony/src/Symfony/Component/HttpKernel/CacheWarmer/CacheWarmerAggregate.php:48 SymfonyComponentHttpKernelCacheWarmerCacheWarmerAggregate->warmUp() at /var/www/ror3/app/bootstrap.php.cache:2641 SymfonyComponentHttpKernelKernel->initializeContainer() at /var/www/ror3/app/bootstrap.php.cache:2411 SymfonyComponentHttpKernelKernel->boot() at /var/www/ror3/vendor/symfony/symfony/src/Symfony/Bundle/FrameworkBundle/Console/Application.php:70 SymfonyBundleFrameworkBundleConsoleApplication->doRun() at /var/www/ror3/vendor/symfony/symfony/src/Symfony/Component/Console/Application.php:120 SymfonyComponentConsoleApplication->run() at
/var/www/ror3/app/console:27

解决方案

Doctrine is trying to determine the Database Platform Version.

You can avoid this behaviour adding in the Doctrine DBAL Configuration the server version. From the doc:

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.

As example:

#config.yml

doctrine:
    dbal:
    ...
        server_version:       5.6

Hope this help

这篇关于Symfony 2.7 cache:clear 命令检查每个数据库连接的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆