生产环境中未找到Symfony 2路由。

7
我有像 /、/login、/register 等路由,在开发环境下运行良好。
最初,当尝试通过 app.php 而非 app_dev.php 访问我的网站时,我遇到了 404 错误。
然后我按照 this advice 进行操作并清理了缓存。
但现在我尝试访问任何已注册的路由(如 app.php/ 或 app.php/login)时都只得到一个空白屏幕。
我在 prod.log 中找到了这条信息:
[2012-02-24 11:27:05] request.ERROR: Symfony\Component\HttpKernel\Exception\NotFoundHttpException: No route found for "GET /login" (uncaught exception) at /home/renat/www/ptracker/app/cache/prod/classes.php line 4564 [] []

这是我的routing.yml文件:

PtrackerTasksBundle:
resource: "@PtrackerTasksBundle/Resources/config/routing.yml"
prefix:   /

PtrackerAuthBundle:
resource: "@PtrackerAuthBundle/Resources/config/routing.yml"
prefix:   /

AuthBundle中的routing.yml:

homepage:
pattern:  /
defaults: { _controller: PtrackerAuthBundle:Default:index }

register:
pattern:  /register
defaults: { _controller: PtrackerAuthBundle:Default:register }

login:
pattern:  /login
defaults: { _controller: PtrackerAuthBundle:Default:login }

activate:
pattern:  /activate/{username}/{salt}
defaults: { _controller: PtrackerAuthBundle:Default:activate }

login_check:
pattern:  /login_check

TasksBundle中的routing.yml:

tasks:
pattern:  /tasks
defaults: { _controller: PtrackerTasksBundle:Default:index }

tasks_add:
pattern:  /tasks/add
defaults: { _controller: PtrackerTasksBundle:Default:add }  

tasks_view:
pattern:  /tasks/view/{id}
defaults: { _controller: PtrackerTasksBundle:Default:view, id : null }  

tasks_change_responsible:
pattern:  /tasks/change_responsible/{id}/{responsible}
defaults: { _controller: PtrackerTasksBundle:Default:change_responsible, _format: json }  

tasks_change_status:
pattern:  /tasks/change_status/{id}/{status}
defaults: { _controller: PtrackerTasksBundle:Default:change_status, _format: json }    

tasks_edit:
pattern:  /tasks/edit/{id}
defaults: { _controller: PtrackerTasksBundle:Default:edit } 

我错过了什么或者我做错了什么?


1
php app/console router:debug -e=prod 输出了什么? - meze
[RuntimeException]
无法写入缓存目录 (/home/renat/www/ptracker/app/cache/prod)现在它使用777权限就可以工作了 :)
- mennanov
3个回答

12

首先,在控制台中查看路由列表(命令为router:debug)。 如果你在那里找到了你的路由,那么问题可能是清除缓存的一些麻烦。在我的情况下,我手动删除了app/cache文件夹,然后它就可以工作了。

要设置没有缓存的PROD环境,在app.php文件中更改为

$kernel = new AppKernel('prod', true);

1
问题出在文件夹权限设置不正确。当我将其设置为777时,它就可以正常工作了。 - mennanov
第二个参数用于启用调试,在此情况下为生产环境。如何启用调试和禁用缓存 - Wagner Pinheiro

9
尝试在生产环境中清除缓存。
php app/console cache:clear --env=prod --no-debug

0
app/console cache:clear

or

active mod_rewrite in

activate the directory:  nano /etc/apache2/apache2.conf

AllowOverride None
<Directory "/var/www/html">
    AllowOverride None
</Directory>
for
<Directory "/var/www/html">
    AllowOverride All
</Directory>

http://www.dev-metal.com/enable-mod_rewrite-ubuntu-14-04-lts/

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接