我最近在我的机器上成功安装了Symfony2。
我可以访问http:/localhost/app_dev.php
(开发环境)
但是,当我尝试访问prod环境时:
http:/localhost/app.php
我在浏览器中收到以下错误消息:
糟糕!发生错误
服务器返回“404 Not Found”。 有些东西坏了。请发送电子邮件至[email],告诉我们 发生此错误时你正在做什么。我们会尽快修复它 可能。很抱歉给您带来不便。
我已经检查过显而易见的事了:文件app.php与app_dev.php存在于同一个文件夹中 - 所以我不知道是什么导致了这个。
有没有人有解决方案来解决这个问题?
[[编辑]]
我按照建议键入:sudo php app/console cache:clear env=prod no-debug
清除了缓存。我现在得到一个空白的屏幕。令人担忧的是,app / logs / prod.log中没有记录错误消息,所以我对于出了什么问题没有最微妙的想法(prod环境仍然可以正常工作)。
我的app / config / routing.yml文件的内容:
### fos routing, remove later
fos_user_security:
resource: "@FOSUserBundle/Resources/config/routing/security.xml"
fos_user_profile:
resource: "@FOSUserBundle/Resources/config/routing/profile.xml"
prefix: /profile
fos_user_register:
resource: "@FOSUserBundle/Resources/config/routing/registration.xml"
prefix: /register
fos_user_resetting:
resource: "@FOSUserBundle/Resources/config/routing/resetting.xml"
prefix: /resetting
fos_user_change_password:
resource: "@FOSUserBundle/Resources/config/routing/change_password.xml"
prefix: /profile
###
# Internal routing configuration to handle ESI
#_internal:
# resource: "@FrameworkBundle/Resources/config/routing/internal.xml"
# prefix: /_internal
这是我的app / config / routing_dev.yml文件
_welcome:
pattern: /
defaults: { _controller: AcmeDemoBundle:Welcome:index }
_demo_secured:
resource: "@AcmeDemoBundle/Controller/SecuredController.php"
type: annotation
_demo:
resource: "@AcmeDemoBundle/Controller/DemoController.php"
type: annotation
prefix: /demo
_assetic:
resource: .
type: assetic
_wdt:
resource: "@WebProfilerBundle/Resources/config/routing/wdt.xml"
prefix: /_wdt
_profiler:
resource: "@WebProfilerBundle/Resources/config/routing/profiler.xml"
prefix: /_profiler
_configurator:
resource: "@SensioDistributionBundle/Resources/config/routing/webconfigurator.xml"
prefix: /_configurator
_main:
resource: routing.yml
我刚注意到我不要有一个routing_prod.yml **
(警钟响了) - Symfony2没有附带生产路由配置文件吗?
我的Apache配置文件内容如下所示:
NameVirtualHost *:80
<VirtualHost *:80>
DocumentRoot /path/to/symfony/web
ServerName localhost
# Custom log file
Loglevel warn
ErrorLog /path/localhost.error.log
CustomLog /path/localhost.access.log combined
<Directory /path/to/symfony/web>
AllowOverride None
RewriteEngine On
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^(.*)$ app.php [QSA,L]
</Directory>
</VirtualHost>
[[更多详情]]
app / logs / prod.log的内容
[2012-08-10 18:10:38] security.INFO:用一个填充的SecurityContext 匿名令牌[] [] [2012-08-10 18:10:38] request.ERROR: Symfony \ Component \ HttpKernel \ Exception \ NotFoundHttpException:无路由 找到了“GET /”(未被捕获的例外) /path/to/symfony/vendor/symfony/src/Symfony/Bundle/FrameworkBundle/EventListener/RouterListener.php 第83行[] []
答案 0 :(得分:40)
您是否打开了生产环境并清除了缓存? 运行控制台并执行以下操作:
app/console --env=prod cache:clear
答案 1 :(得分:11)
我想我遇到了类似的问题。我相信升温缓存解决了我的实例。
php app/console cache:warmup --env=prod --no-debug
答案 2 :(得分:5)
最近安装了Symfony 2.2我也碰到了这个问题,但实际上这是正常行为。开箱即用的意义Symfony 2.x(截至本文撰写时)并未附带任何路由/内容 生产环境。
在您的情况下,它看起来您安装了Symfony之友捆绑包,它确实在生产路线(routing.yml
)中设置了一些路线,但是一眼就看不到任何路线似乎都是针对生产的根部环境即http:/localhost/app.php/
所以404可能是预期的。我不能完全确定,因为它导入路线所以细节被模糊了。检查路由的一个好方法是阅读Visualizing & Debugging Routes,了解app/console router:debug
CLI命令。
routing.yml
是生产环境中路由的默认位置(意味着routing_prod.yml
不是一件事)。您会注意到routing_dev.yml
导入routing.yml
。这意味着您在生产中投入的所有内容(开箱即用)都可以在开发中访问。您看到的演示内容是开发环境独有的,这就是您在制作中没有看到它的原因。随意移动一些东西以满足您的需求,但通常一个好主意是开发人员导入生产,但反之亦然。
每当您想要测试生产中的更改时,您都希望清除缓存,因为@tolgap建议。生产环境严重依赖预编译缓存,因此该命令将强制生产缓存刷新。开发环境总是刷新它的缓存。了解这一点对于与Symfony合作至关重要。虽然Book on Symfony.org是一个很好的切入点,但它并没有完全说明缓存和工作流的字幕。在我意识到routing.yml
和routing_dev.yml
之间的关系以及开发的软缓存与生产的硬缓存之前,我确实感到困惑。
答案 3 :(得分:2)
我很惊讶没有人告诉你: 你在prod环境中没有路径。
在app / config / routing.yml
中写下这个 _welcome:
pattern: /
defaults: { _controller: AcmeDemoBundle:Welcome:index }
答案 4 :(得分:2)
您需要为本地服务器安装APC,一切都将在prod mod中运行。 还尝试在parameters.yml中找到正确的数据库,因为dev正在添加DATABASENAME_dev。
答案 5 :(得分:2)
我尝试了@gilden在评论中提出的解决方案;它有效。
我运行了php bin/console cache:clear --env=prod
而不是rm -rf app/cache/*
。
答案 6 :(得分:2)
今天我遇到了同样的问题并尝试了各种解决方案。直到我记得启用mod_rewrite apache服务很重要。为此,请运行以下命令(在Ubuntu上)
sudo a2enmod rewrite
然后重启服务器
sudo service apache2 restart
我希望有人可以提供帮助。 此致!
答案 7 :(得分:1)
我的symfony缓存文件夹不可写。当我将缓存完整目录及其文件设置为可写时,它工作正常。
sudo chmod -R 777 .
答案 8 :(得分:-2)
(Agrega esto dentro del archivo routing_dev.yml)在routing_dev.yml中添加此内容
_wellcome:
pattern: /
defaults: { _controller:AppBundle:Default:index }