Symfony2 dev环境工作,prod环境给出404错误

Hom*_*lli 23 php symfony

我最近在我的机器上成功安装了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)

  • +1这帮助我解决了其中一个恼人的开发工作,刺激WSOD情况. (2认同)

Mar*_*Fox 5

最近安装了Symfony 2.2我也碰到了这个问题,但这实际上是正常行为.开箱即用的意义Symfony 2.x(截至本文撰写时)并未附带生产环境的任何路径/内容.

在你的情况下,它看起来你安装了Symfony之友捆绑,它确实在你的生产路线(routing.yml)中设置了一些路线,但是一眼就看不到任何路线似乎都是针对你的生产环境的根,即http:/localhost/app.php/所以404可能是预期的.我不能完全确定,因为它导入路线所以细节被模糊了.检查路由的一个好方法是阅读可视化和调试路由,您可以在其中了解app/console router:debugCLI命令.

routing.yml是生产环境中路由的默认位置(意思routing_prod.yml不是).你会注意到routing_dev.yml进口routing.yml.这意味着您在生产中投入的所有内容(开箱即用)都可以在开发中访问.您看到的演示内容是开发环境独有的,这就是您在制作中没有看到它的原因.随意移动一些东西以满足您的需求,但通常一个好主意是开发人员导入生产,但反之亦然.

每当您想要测试生产中的更改时,您都希望清除缓存,如@tolgap建议的那样.生产环境严重依赖预编译缓存,因此该命令将强制生产缓存刷新.开发环境总是刷新它的缓存.了解这一点对于与Symfony合作至关重要.虽然Book on Symfony.org是一个很好的切入点,但它并没有完全说明缓存和工作流的字幕.我是一分钟绝对困惑我才意识到之间的关系routing.yml,并routing_dev.yml与开发与生产的硬盘缓存的软缓存.