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

时间:2012-08-08 10:22:28

标签: 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

这是我的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行[] []

9 个答案:

答案 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.ymlrouting_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 }