关于 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
或者-删除文档根目录下的所有内容后,更新(composer update
和 composer update -o
,按照 this answer ),然后部署:
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
顺便说一句,为什么要创建目录app/cache/de_
(除了dev
和prod
)?
为了完整起见,您可以找到我的composer.json
here .
可能是什么问题?本地和远程平台不同,但错误似乎与代码有关,而不是服务器配置。
本地机器:
- Windows 7
- Zend 服务器 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 :(
最佳答案
可能的原因是您的开发和生产服务器上有不同版本的供应商。然后运行命令composer update
来更新您拥有的所有供应商。有时它会使一切崩溃。因此,有一个命令composer install
可以检查您的composer.lock文件并安装那里的版本。
如果您只需要更新一个包,您可以运行 composer update bundle_name
。此操作会更新您的供应商文件夹并更新composer.lock文件。
您可以查看symfony-standard存储库,它有 composer.lock 文件。每次更新供应商时,您都必须上传该文件的新版本,以使所有供应商保持相同版本。同样的故事,然后部署您的应用程序。
您可以在official documentation中阅读有关composer.lock
文件的更多信息。 .
所以,尝试删除整个vendor/文件夹,然后复制到远程服务器composer.lock文件,输入phpcomposer.phar install
关于Symfony 2.2.1 远程服务器上出现 fatal error (仅限)-为什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16792254/