2015-12-01 3 views
25

Ich habe gerade auf symfony 2.7 aktualisiert, und habe ein nerviges Verhalten.Symfony 2.7 cache: clear Befehl überprüft jede Datenbankverbindung

Einige Verbindungen in meiner config.yml sind optionables, und beschreiben ausländische Datenbanken, die nicht in jeder prod Instanzen verwendet werden sollen.

Wenn ich einen Cache mache: clear, scheint es, dass jetzt alle Verbindungen überprüft werden, auch wenn ich nicht will, dass sie auf einem bestimmten Server aktiv sind.

Wenn die Option --no-Warm-up Einstellung tritt das Problem auf die Hälfte der Zeit

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

[Lehre \ DBAL \ Exception \ Connection]
Eine Ausnahme ist aufgetreten in Treiber: SQLSTATE [42000] [1049] Unknown Datenbank 'bal_syncrho_database'

Exception-Trace:() bei /var/www/ror3/vendor/doctrine/dbal/lib/Doctrine/DBAL/Driver/AbstractMySQLDriver.php:103 doctr ine \ DBAL \ Driver \ AbstractMySQLDriver-> convertException() um /var/www/ror3/vendor/doctrine/dbal/lib/Doctrine/DBAL/DBALException.php:133 Doctrine \ DBAL \ DBALException :: driverException() um /var/www/ror3/vendor/doctrine/dbal/lib/Doctrine/DBAL/Driver/PDOMySql/Driver.php:47 Doctrine \ DBAL \ Driver \ PDOMySql \ Driver-> connect() unter /var/www /ror3/vendor/doctrine/dbal/lib/Doctrine/DBAL/Connection.php:360 Doctrine \ DBAL \ Connection-> connect() unter /var/www/ror3/vendor/doctrine/dbal/lib/Doktrin/DBAL/Connection.php: 429 Doctrine \ DBAL \ Verbindung-> getDatabasePlatformVersion() um /var/www/ror3/vendor/doctrine/dbal/lib/Doctrine/DBAL/Connection.php:389 Doctrine \ DBAL \ Connection -> detectDatabasePlatform () unter /var/www/ror3/vendor/doctrine/dbal/lib/Doctrine/DBAL/Connection.php:328 Doctrine \ DBAL \ Connection-> getDatabasePlatform() unter /var/www/ror3/vendor/doctrine /orm/lib/Doctrine/ORM/Mapping/ClassMetadataFactory.php:763 Doktrin \ ORM \ Mapping \ ClassMetadataFactory-> getTargetPlatform() um /var/www/ror3/Hersteller/Doktrin/Orm/Lib/Doctrine/ORM/Mapping/ClassMetadataFactory.php: 616 Lehre \ ORM \ Mapping \ ClassMetadataFactory-> completeIdGeneratorMapping() bei /var/www/ror3/vendor/doctrine/orm/lib/Doctrine/ORM/Mapping/ClassMetadataFactory.php:174 Doctrine \ ORM \ Mapping \ ClassMetadataFactory-> doLoadMetadata() um /var/www/ror3/Hersteller/doctrine/common/lib/Lehre/Common/Persistence/Mapping/Abstrac tClassMetadataFactory.php: 332 Lehre \ Common \ Persistenz \ Mapping \ AbstractClassMetadataFactory-> loadMetadata() bei /var/www/ror3/vendor/doctrine/orm/lib/Doctrine/ORM/Mapping/ClassMetadataFactory.php:78 Doctrine \ ORM \ Mapping \ ClassMetadataFactory-> loadMetadata() um /var/www/ror3/vendor/doctrine/common/lib/Doctrine/Common/Persistence/Mapping/AbstractClassMetadataFactory.php:216 Doctrine \ Common \ Persistence \ Mapping \ AbstractClassMetadataFactory-> getMetadataFor() bei /var/www/ror3/vendor/doctrine/common/lib/Doctrine/Common/Persistence/Mapping/AbstractClassMetadataFactory.php:115 Lehre \ Common \ Persistenz \ Mapping \ AbstractClassMetadataFactory-> getAllMetadata() um /var/www/ror3/Hersteller/symfony/symfony/src/Symfony/Brücke/Doku/CacheWarmer/ProxyCacheWarmer.php: 69 Symfony \ Brücke \ Lehre \ CacheWarmer \ ProxyCacheWarmer-> Warmup() bei /var/www/ror3/vendor/symfony/symfony/src/Symfony/Component/HttpKernel/CacheWarmer/CacheWarmerAggregate.php:48 Symfony \ Komponente \ HttpKernel \ CacheWarmer \ CacheWarmerAggregate-> warmUp() unter /var/www/ror3/app/bootstrap.phpcache:2641 Symfony \ Component \ HttpKernel \ Kernel-> initializeContainer() um /var/www /ror3/app/bootstrap.phpcache:2411 Symfony \ Komponente \ HttpKernel \ Kernel -> boot() um /var/www/ror3/vendor/symfony/symfony/src/Symfony/Bundle/FrameworkBundle/Konsole/Application.php: 70 Symfony \ Bundle \ FrameworkBundle \ Console \ Anwendung-> doRun() um /var/www/ror3/Hersteller/symfony/symfony/src/Symfony/Komponente/Consol e/application.php: 120 Symfony \ Component \ Console \ Application-> run() bei
/var/www/ror3/app/console: 27

Antwort

59

Lehre versucht, die Datenbank-Plattform Version zu bestimmen, .

Sie können dieses Verhalten vermeiden, indem Sie die Serverversion Doctrine DBAL Configuration hinzufügen. Vom doc:

Die server_version Option wurde in Lehre DBAL 2.5, zugegeben, die von DoctrineBundle 1.3 verwendet wird. Der Wert dieser Option sollte mit Ihrer Datenbankserverversion übereinstimmen (verwenden Sie den Befehl postgres -V oder psql -V, um Ihre PostgreSQL-Version und mysql -V zu finden, um Ihre MySQL-Version zu erhalten).

Wenn Sie diese Option nicht definieren, und Sie haben Ihre Datenbank noch nicht erstellt haben, können Sie PDOException Fehler erhalten, weil die Lehre wird versuchen, die Datenbank-Server-Version automatisch zu erraten, und keiner ist verfügbar.

Als Beispiel:

#config.yml 

doctrine: 
    dbal: 
    ... 
     server_version:  5.6 

Hope this Hilfe

+2

Vielen Dank. Du hast meinen Tag gerettet. Ich benutze AWS ElastiBeanstalk und diese Option ist sehr, sehr nützlich. – Strabek

+0

Habe heute meinen Tag gerettet, danke! –

+0

danke @FlorentDestremau Sie sind herzlich willkommen! – Matteo

Verwandte Themen