Symfony 2.2.1远程服务器上的致命错误(仅限) - 为什么?

时间:2013-05-28 12:36:06

标签: symfony cygwin fosuserbundle composer-php

this question中提到的Symfony代码库中,安装FOSUserBundle后,它在本地工作,但在远程服务器上它甚至无法启动,提供HTTP 500错误页面。

编辑:灾难似乎发生在app_dev.php的以下一行:

$kernel = new AppKernel('dev', true);

在远程服务器上,我收到如下错误:

Fatal error: Class 'Symfony\Component\HttpFoundation\Request' not found in [docroot]/web/app.php on line 22

或删除文档根目录下的所有内容后,根据this answer更新(composer updatecomposer update -o),然后部署:

Fatal error: Cannot redeclare class 
Symfony\\Component\\HttpFoundation\\Session\\Storage\\NativeSessionStorage in
[docroot]/vendor/symfony/symfony/src/Symfony/Component/HttpFoundation/Session/Storage/NativeSessionStorage.php
on line 25

我清除了Symfony缓存,删除了app/cache/devapp/cache/prod/目录,但没有运气。

我没有得到的另一件事:远程app/console cache:clear会出现此错误:

Fatal error: Cannot redeclare class 
EnhancedProxy_72114c0f8683bcc2a66ceccb136abe5a78f8577e\__CG__\Acme\DemoBundle\Controller\SecuredController
in [docroot]/app/cache/de_/jms_diextra/proxies/Acme-DemoBundle-Controller-SecuredController.php
on line 28

BTW,为什么目录app/cache/de_devprod除外)已创建?

为了完整起见,您可以找到我的composer.json here

可能是什么问题?本地和远程平台不同,但错误似乎与代码有关,而不是服务器配置。

本地机器:

  • Windows 7
  • Zend Server CE
  • Apache 2.2
  • PHP 5.3.14(apache模块)
  • MySQL 5.1
  • APC

远程机器:

  • Ubuntu 12.04
  • Apache 2.2
  • PHP 5.3.10 fpm(fastcgi)
  • MySQL 5.5
  • APC

有什么建议吗?甚至关于如何调试这个?我开始考虑放弃Symfony :(

4 个答案:

答案 0 :(得分:3)

您的dev和prod服务器上有不同版本的供应商的可能原因。然后运行命令composer update,更新您拥有的所有供应商。有时它会崩溃一切。因此,有一个命令composer install可以检查您的composer.lock文件并安装您拥有的版本。

如果您只需更新一个捆绑包,则可以运行composer update bundle_name。此操作也会更新您的供应商文件夹并更新composer.lock文件。

您可以检查symfony-standard存储库,它有composer.lock个文件。每次更新供应商时,您都必须上传该文件的新版本,以使所有供应商保持相同的版本。然后您部署应用程序。

您可以在official documentation中详细了解composer.lock文件。

因此,尝试删除整个供应商/文件夹,然后复制到远程服务器composer.lock文件,键入php composer.phar install

答案 1 :(得分:1)

可能的解决方案可能是

  1. Composer未完成(使用composer update使用大量资源,因此请始终在远程环境中使用锁定文件中的composer install。您应该从本地开发环境中放置最新的锁定文件并重新安装。如http://getcomposer.org/doc/03-cli.md#install

  2. 中所述,同时提供--optimize-autoloader (-o)参数
  3. 您在配置中激活了apc缓存,但未在/ web目录中的启动文件(通常为app.php)中正确实现。在这种情况下,请在全新下载中查看启用APC的文件,或https://github.com/dbu/symfony-project/blob/master/web/app.php。评论的部分应该是未注释的。

答案 2 :(得分:1)

有一个类似的问题,它开始缺少Request类但没有结束。事实证明我的FTP客户端(FileZilla和WinSCP)在传输远程服务器报告成功但导致0字节文件(在Windows 7上)时出现问题。

尝试了一些传输设置,但没有运气。由于远程计算机上的文件锁定,WinSCP至少会报告断开连接,然后传输失败。它导致一个项目充斥着0byte文件和自动加载器故障。

切换到另一个FTP客户端(CoffeeCup FreeFTP),它转移好了,不确定此时为什么其他客户有这个问题,不幸的是托管支持也无法解释它。

答案 3 :(得分:-1)

转到:

 vendor/symfony/symfony/src/symfony/Component/HttpFoundation/Session/Storage/NativeSessionStorage.php

并改变

protected $started = false;

protected $started = TRUE;