2012-08-13 137 views
2

我已经安装了Symfony2,在修复文件权限后,我可以通过将它指向以下位置来访问我的浏览器的开发环境:request.ERROR:Symfony Component HttpKernel Exception NotFoundHttpException:找不到“GET /”的路由

http://localhost/app_dev.php

然而,当我尝试通过浏览器指向http://localhost访问的生产环境,我得到下面的异常(从应用/日志/ prod.log):

[2012-08-13 11:30:03] request.ERROR: Symfony\Component\HttpKernel\Exception\NotFoundHttpException: No route found for "GET /" (uncaught exc eption) at /path/to/frameworks/Symfony2/app/cache/prod/classes.php line 4584 [] []

我然后检查利用从命令行获得产品环境的可用路由。这是该调查的结果。令人难以置信的是,它显示没有为这个环境定义的路由(我不相信错误消息 - 基本上是说同样的事情)。

所以,我的结论是:Symfony2开箱即用,并且生产环境没有默认路由 - 这是真的,还是我在某处犯了错误?

更重要的是,我该如何解决这个问题?在SF1.x中,直接从dev切换到prod,反之亦然。例如,如何在产品环境中查看AcmeDemo应用程序。 ?

[更新]]

thecatontheflat反馈后,我添加了一个简单的测试路线我的routing.yml文件。应用程序/配置/ routing.yml中的内容现在是:

_welcome2: 
    pattern: /test 
    defaults: { _controller: AcmeDemoBundle:Welcome:index } 

当我尝试http://localhost/test在浏览器中,我得到相同的404错误。当我调试在控制台可用的路线时,我得到以下输出:

[email protected]:~/path/to/frameworks/Symfony2$ php app/console router:debug -e=prod 
[router] Current routes 
Name  Method Pattern 
_welcome2 ANY /test 
+0

可能你在'routing_prod.yml'和'routing_dev.yml'中描述了不同的路由。你应该检查那些地方。 – 2012-08-13 10:47:07

+0

@thecatontheflat:我没有routing_prod.yml。这在手册(IIRC)的任何地方都没有提及。 – 2012-08-13 10:52:13

+0

然后,如果你想让'routing_dev'中定义的所有路由都可以在产品环境中访问 - 你必须将它们移动到'routing.yml'。 – 2012-08-13 10:53:54

回答

3

我有完全相同的问题!

Symfony2中有两个通用路由文件名为:

app/config/routing.yml and app/config/routing_dev.yml 

然而,也有每捆捆特定路由文件。标准程序是在你的bundle routing.yml文件中定义所有的bundle路由,然后从主路由中引用它。yml文件加入:

YourbundlenameMainBundle: 

resource: "@YourbundlenameMainBundle/Resources/config/routing.yml" 

prefix: /

这就是我的,我仍然得到错误。但是后来我更仔细地阅读了这个错误......没有找到GET/....的路由,然后我检查了我的routing_dev.yml文件,当然它有一个用于/从Acme演示包​​的欢迎路线。这就是为什么它适用于dev版本而不是prod版本!

解决方案:

添加路线/要么你的routing.yml全局文件或者通过添加您的routing.yml包文件如下:

_welcome: 

pattern:/

defaults: { _controller: YourbundlenameMainBundle:Default:index } 

您可以更改索引一些其它途径如果你的欢迎页面是不是指数

1

我有完全相同的问题。这是由于AppKernel.php中缺少bundel引起的。有点晚了,但你可能会尝试在web/app.php中更改这一行: $ kernel = new AppKernel('prod',false); 至: $ kernel = new AppKernel('prod',true);

这将启用调试,你应该能够找到你的问题。当修复时,你会需要将它改回false;)。

希望这会有所帮助。

1

后你要确保你在任何你的routing.yml定义你的/路由

_welcome: 
pattern:/
defaults: { _controller: YourbundlenameMainBundle:Default:index } 

清除您的产品环境缓存!

app/console cache:clear --env=prod 
相关问题