Symfony 2.7应用程序没有创建数据库



我的Symfony2应用程序使用Doctrine with PDO_mysql:时遇到了一些非常奇怪的行为

从存储库中克隆后,我需要通过composer安装它,而不需要创建数据库。我想稍后使用app/console doctrine:database:create命令创建数据库,在安装过程中使用parameters.yml中指定的参数。

但是,当我运行composer install时,我在composer安装后cmd"Sensio\Bundle\DistributionBundle\composer\ScriptHandler::clearCache":上遇到此错误

[PDOException] SQLSTATE[42000] [1049] Unknown database 'test'

首先,我认为这是这个问题的重复。但是在app/config/config.yml中的条令连接配置中指定server_version并没有帮助。此外,我发现的其他解决方案建议恢复到doctrine/dbal的早期版本,如2.4.4或2.4.3。我尝试了doctrine/dbaldoctrine/ormdoctrine/doctrine-bundle版本的任何组合,但行为没有改变。

在那之后,我注意到运行抛出这个错误的命令会重复工作。例如,当我第一次在新安装的副本上运行app/console doctrine:database:create时(我暂时删除了那些引发上述错误的安装后脚本),它会引发此错误。当我立即再次运行它时,它成功地创建了它:

Created database `test` for connection named default

完全不相关的控制台命令也会发生这种情况。当我第一次运行app/console向我显示可用命令时,我得到了未知数据库'test'。当我立即再次运行它时,一切都很好,之后它甚至允许我使用database:create命令创建数据库。

在我看来,这似乎需要在安装后首先进行初始化,以便pdo_mysql连接正常工作。但它是什么?我使用的是类似于Symfony标准版的composer.json设置。但无论我尝试什么,结果都是一样的。。。两天后,我真的绝望了。

注意1:如果我在parameters.yml中指定数据库名称之前手动创建数据库,那么一切都会按预期进行。但这对我来说不是一个选项。在创建DB之前,我需要能够使用所有安装后cmds运行composer install

注意2:我在本地主机Linux机器上手动安装MySQL,同时在Windows机器上使用MariaDB的xampp堆栈上尝试所有这些。两者的行为相同

我用verbose调用了一些有问题的命令,并得到了一个异常跟踪,包含以下内容:

DoctrineDBALSchemaAbstractSchemaManager->tablesExist() 
    at vendor/lexik/translation-bundle/Lexik/Bundle/TranslationBundle/Storage/DoctrineORMStorage.php:28
LexikBundleTranslationBundleStorageDoctrineORMStorage->translationsTablesExist() 
    at vendor/lexik/translation-bundle/Lexik/Bundle/TranslationBundle/EventDispatcher/GetDatabaseResourcesListener.php:41

所以我检查了LexikTranslationBundle,发现了这个问题,通过这次提交修复了这个问题。对我来说不幸的是,修复程序只合并到版本4中,这需要Symfony 2.8。我也提议合并到其他版本中,但与此同时,我最终分叉了捆绑包并为自己修复了它。现在一切如预期。

相关内容

  • 没有找到相关文章

最新更新