我最近在我的机器上成功安装了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
Run Code Online (Sandbox Code Playgroud)
这是我的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
Run Code Online (Sandbox Code Playgroud)
我刚注意到我没有 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>
Run Code Online (Sandbox Code Playgroud)
[[更多详情]]
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:在/path/to/symfony/vendor/symfony/src/Symfony/Bundle/FrameworkBundle/EventListener/RouterListener.php第83行[] []找不到"GET /"(未捕获的异常)的路由
tol*_*gap 41
您是否打开了生产环境并清除了缓存?运行控制台并执行以下操作:
app/console --env=prod cache:clear
Run Code Online (Sandbox Code Playgroud)
小智 11
我想我有类似的问题.我相信升温缓存解决了我的实例.
php app/console cache:warmup --env=prod --no-debug
Run Code Online (Sandbox Code Playgroud)
最近安装了Symfony 2.2我也碰到了这个问题,但这实际上是正常行为.开箱即用的意义Symfony 2.x(截至本文撰写时)并未附带生产环境的任何路径/内容.
在你的情况下,它看起来你安装了Symfony之友捆绑,它确实在你的生产路线(routing.yml
)中设置了一些路线,但是一眼就看不到任何路线似乎都是针对你的生产环境的根,即http:/localhost/app.php/
所以404可能是预期的.我不能完全确定,因为它导入路线所以细节被模糊了.检查路由的一个好方法是阅读可视化和调试路由,您可以在其中了解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
与开发与生产的硬盘缓存的软缓存.
归档时间: |
|
查看次数: |
44073 次 |
最近记录: |