在宝塔盒上部署symfony2应用程序时的Doctrine错误

时间:2013-12-23 16:43:52

标签: php symfony doctrine-orm doctrine pagoda-box

在PagodaBox上部署我的应用程序后,我收到了一个学说错误。它在我的本地计算机上的dev和prod环境中都可以正常工作,但是实时站点会返回此错误:

致命错误:/var/www/vendor/doctrine/doctrine-bundle/Doctrine/Bundle/DoctrineBundle/DoctrineBundle.php:101中未捕获的异常'LogicException',消息'传递了非法值(没有给出数组或字符串)'堆栈跟踪:#0 /var/www/vendor/doctrine/doctrine-bundle/Doctrine/Bundle/DoctrineBundle/DoctrineBundle.php(101):spl_autoload_register(NULL)#1 /var/www/app/bootstrap.php.cache( 2275):Doctrine \ Bundle \ DoctrineBundle \ DoctrineBundle-> boot()#2 /var/www/app/bootstrap.php.cache(2303):Symfony \ Component \ HttpKernel \ Kernel-> boot()#3 / var / www / web / app.php(23):Symfony \ Component \ HttpKernel \ Kernel-> handle(对象(Symfony \ Component \ HttpFoundation \ Request))#var {www / vendor /中抛出#4 {main}第101行的doctrine / doctrine-bundle / Doctrine / Bundle / DoctrineBundle / DoctrineBundle.php

每次部署应用程序时都会清除缓存。 任何建议都会感激不尽,因为我完全被难过了!

更新:

我已经做了一些调试,我发现即使在prod环境中,kernel.cache_dir参数也设置为/ var / www / app / cache / dev。这意味着doctrine缓存目录设置错误,因为它依赖于其他参数。我认为kernel.cache_dir是根据环境自动设置的。

2 个答案:

答案 0 :(得分:1)

我终于把它整理好了。这是使用eAccelerator作为我的操作码缓存。事实证明,eAccelerator中存在一个错误,意味着它无法正确处理闭包。我现在正在使用XCache,它一切正常。

答案 1 :(得分:0)

这是DoctrineBundle.php Line 101中的自动加载失败:

 $this->autoloader = Autoloader::register($dir, $namespace, $proxyGenerator);

您将NULL传递给$dir参数,根据例外情况判断它需要array()string

您可以看到该方法使用配置变量$dir中的doctrine.orm.proxy_dir(第64行)。

$dir = $this->container->getParameter('doctrine.orm.proxy_dir');`

我的猜测是你没有正确定义这条路径

修改 - 点击此处查看包含proxy_dir设置的Doctrine's configuration