24

我最近在我的机器上成功安装了 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: Populated SecurityContext with an anonymous Token [] [] [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 /”(未捕获的异常)的路由[] []

4

9 回答 9

41

有没有开启生产环境并清除缓存?运行控制台并执行以下操作:

app/console --env=prod cache:clear
于 2012-08-08T10:26:24.060 回答
12

我想我也有类似的问题。我相信预热缓存可以解决我的实例。

php app/console cache:warmup --env=prod --no-debug
于 2013-04-08T18:06:08.627 回答
4

最近安装了 Symfony 2.2 我也遇到了这个问题,但这实际上是正常行为。开箱即用的含义 Symfony 2.x(在撰写本文时)没有为生产环境提供任何路由/内容。

在您的情况下,您似乎安装了 Friends of Symfony 捆绑包,它确实在您的生产路线 ( routing.yml) 中设置了一些路线,但乍一看,这些路线似乎都没有针对您的生产环境的根目录,即http:/localhost/app.php/404 可能是预期的. 我不能完全确定,因为它正在导入路线,所以细节被掩盖了。检查路由的一个好方法是阅读可视化和调试路由,您可以在其中了解app/console router:debugCLI 命令。

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

任何时候您想测试生产中的更改,您都需要按照@tolgap 的建议清除缓存。生产环境严重依赖预编译缓存,因此该命令将强制您的生产缓存刷新。开发环境总是在刷新它的缓存。理解这一点对于使用 Symfony 至关重要。尽管 Symfony.org 上的书是一个很好的切入点,但它并没有完全说明缓存和工作流的字幕这一点。在我意识到开发的软缓存与产品的硬缓存routing.yml之间的关系之前,我确实感到困惑了一分钟。routing_dev.yml

于 2013-03-25T23:38:16.027 回答
3

我尝试了@gilden 在他的评论中给出的解决方案;有用。

我跑php bin/console cache:clear --env=prod而不是rm -rf app/cache/*.

于 2016-05-05T22:55:52.243 回答
2

我很惊讶没有人告诉你:你在 prod 环境中没有路径。

写在 app/config/routing.yml

  _welcome:
 pattern:  /
 defaults: { _controller: AcmeDemoBundle:Welcome:index }
于 2013-07-04T14:36:12.853 回答
2

您需要为您的本地服务器安装 APC,一切都将在 prod mod 中为您工作。还要尝试在 parameters.yml 中找到正确的数据库,因为 dev 正在添加 DATABASENAME_dev。

于 2013-12-10T14:19:38.063 回答
2

今天我遇到了同样的问题并尝试了各种解决方案。直到我想起启用 mod_rewrite apache 服务很重要。为此,请运行以下命令(在 Ubuntu 上)

sudo a2enmod rewrite

然后重启服务器

sudo service apache2 restart

我希望有人可以提供帮助。问候!

于 2016-09-20T20:46:09.007 回答
1

我的 symfony 缓存文件夹不可写。当我将缓存完整目录及其文件设置为可写时,它就起作用了。

sudo chmod -R 777 .
于 2016-10-05T07:00:39.837 回答
-2

(Agrega esto dentro del archivo routing_dev.yml)在routing_dev.yml中添加这个

_wellcome:
    pattern: /
    defaults: { _controller:AppBundle:Default:index }
于 2015-06-29T16:29:43.843 回答