【发布时间】:2015-10-02 09:12:20
【问题描述】:
我正在使用 Doctrine2 DBAL/ORM 构建 Zend Framework 2 (ZF2) 网站,我在 Windows 和 Mac 上进行同等开发,有时在 Linux (Ubuntu) 上进行开发(我喜欢全方位的体验)。
在composer.json我有以下版本:
- "doctrine/doctrine-orm-module": "^0.9.1"
- "zendframework/zendframework": ">=2.3.2,
起初,我的网站在所有三个使用 XAMPP 的环境(Apache 2.4.16、MySQL 5.0.11 和 PHP 5.6.12)上都运行良好。但突然间,在我在 Windows 上执行一些更改并将这些更改从 GitHub 拉到我的 Mac 计算机后,Doctrine 开始失败,并出现以下异常消息:
An exception was raised while creating "Doctrine\ORM\EntityManager"; no instance returned
我在 ZF2 中配置 Doctrine2 时经常遇到这个异常。但是一旦我完成了,事情就开始了。直到它在 Mac 上崩溃,只有!它在 Windows 上仍然可以正常工作。
我已经完全清除了缓存 (rm data/cache/*) 并且我已经验证了我的配置文件的完整性。 Windows 和 Mac 配置的唯一区别是我为 MySQL 提供了一个unix_socketpath(见下文)。
我的config/application.php:
<?php
return array(
'modules' => array(
// ...
'DoctrineModule',
'DoctrineORMModule',
),
'module_listener_options' => array(
// ...
),
);
我的config/autoload/databases.local.php 看起来像这样(更改了数据库服务器登录信息的值):
<?php
return array(
'doctrine' => array(
'connection' => array(
'orm_default' => array(
'driverClass' => 'Doctrine\DBAL\Driver\PDOMySql\Driver',
'params' => array(
'unix_socket' => '/Applications/XAMPP/xamppfiles/var/mysql/mysql.sock', // This is for Mac
'host' => 'some_host',
'port' => '3306',
'user' => 'some_user',
'password' => 'some_password',
'dbname' => 'some_database',
)
)
),
'configuration' => array(
'orm_default' => array(
'proxy_dir' => 'core/server/data/DoctrineORMModule/Proxy',
'proxy_namespace' => 'DoctrineORMModule\Proxy',
)
)
),
);
如前所述,这些配置可在 Windows 上运行(我可以检索和使用 EntityManager),并且是我的 Mac 解决方案的 1:1 镜像。那么会发生什么?
当我在我的 Mac 上检查缓存的配置文件 data/cache/module-config-cache.application.config.cache.php 时,数据库登录信息不正确,具有以下值:
// ...
array (
'host' => 'localhost',
'port' => '3306',
'user' => 'username',
'password' => 'password',
'dbname' => 'database',
),
// ...
显然这些都是错误的。但是ZF2怎么会在Mac上突然生成错误的配置呢?
我什至尝试在我的 Mac 上从 Git 签出以前的提交,我知道这肯定有效。但同样的问题也会发生。我怀疑可能对这种行为有影响的唯一区别是我运行了composer.phar update,这可能改变了 ZF2 和/或 Doctrine2 的版本。
【问题讨论】:
-
您是否尝试通过运行
orm:generate-proxies重新生成代理? -
@StoryTeller 我也从
data文件夹(data/DoctrineORMModule/Proxy) 中删除了代理。它甚至没有生成它们。
标签: php macos doctrine-orm zend-framework2