在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 update
和composer 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/dev
和app/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_
(dev
和prod
除外)已创建?
为了完整起见,您可以找到我的composer.json
here。
可能是什么问题?本地和远程平台不同,但错误似乎与代码有关,而不是服务器配置。
本地机器:
远程机器:
有什么建议吗?甚至关于如何调试这个?我开始考虑放弃Symfony :(
答案 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)
可能的解决方案可能是
Composer未完成(使用composer update
使用大量资源,因此请始终在远程环境中使用锁定文件中的composer install
。您应该从本地开发环境中放置最新的锁定文件并重新安装。如http://getcomposer.org/doc/03-cli.md#install
--optimize-autoloader (-o)
参数
您在配置中激活了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;