开发异常在生产环境中显示

7
我知道这是一个大忌讳...在我的网站上线运行时不应该显示开发人员错误页面,我该怎么做才能确保在生产环境中不会显示开发环境的错误信息呢?
为什么会出现这些?我认为在生产模式下默认是关闭的,我错过了某个设置吗?
注意:这是在共享服务器上。而且使用的是app.php而不是app_dev.php。
当我在本地进入生产模式时,它正确地显示了正确的错误消息(如下):
“糟糕!发生错误 服务器返回"404未找到"。某些东西出问题了。请通过[email]向我们发送电子邮件,并告诉我们在发生此错误时您正在做什么。我们将尽快修复。对造成的任何不便表示抱歉。”
然而,在实际网站上却显示了Symfony2开发环境的错误信息?
我试图制作自定义错误消息,通过在app/Resource/TwigBundle/views/Exception中创建error404.html.twig文件,但它仍然没有加载此文件,而是显示了开发人员的错误消息。

你是否真正使用了Symfony的'dev'环境?请注意,在web文件夹中有两个前端控制器,即app.phpapp_dev.php。你正在使用哪一个? - Nic Wortel
使用app.php。甚至当我尝试使用app_dev.php时,它也不允许我这样做,我会收到以下错误信息:“您无权访问此文件。请查看app_dev.php获取更多信息。” - dizzyd
在app.php文件中 - $kernel = new AppKernel('prod', true); - dizzyd
那可能是导致你问题的原因,可以看看我的回答。 - Nic Wortel
1个回答

17
在Symfony标准版中的前端控制器(web/app.php)中,会创建一个AppKernel实例。AppKernel继承自Symfony的Kernel,其构造函数需要两个参数。constructor from Symfony's Kernel即为该构造函数。请注意保留文中的{和}符号。
/**
 * Constructor.
 *
 * @param string $environment The environment
 * @param bool   $debug       Whether to enable debugging or not
 */
public function __construct($environment, $debug)

"

$environment参数只确定使用哪个配置文件(config_dev.ymlconfig_prod.yml等)。$debug参数是启用或禁用调试的参数(因此决定是否显示异常)。

因此,在app.php中更改:

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

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

这应该用用户友好的错误页面替换详细的异常页面。


成功了!我在哪里可以找到$debug被设置为true?我按照指南操作,它提到要将'prod', true 改成什么。这是在app_dev.php中的'dev', true吗? - dizzyd
你的意思是什么?当你创建一个新实例时,你将$debug设置为true ($kernel = new AppKernel('prod', true);)。构造函数在vendor/symfony/symfony/src/Symfony/Component/HttpKernel/Kernel.php的第77行中定义。 - Nic Wortel
$kernel = new AppKernel('prod', true); 这句话的意思不是将其设置为生产模式吗?这就是我感到困惑的地方。我正在遵循这里的指南:http://www.livelywebdesign.com/blog/2013/05/symfony-2-application-on-shared-hosting/#comment-52147 - dizzyd
在其中他们提到,“最后,我们需要更改 $kernel = new AppKernel('prod', false); 将 AppKernal 对象实例化时的第二个参数从 'false' 更改为 'true'。” - dizzyd
我不知道为什么这个指南告诉你在生产环境中启用调试模式,但这似乎并不是一个好主意。你能在关闭调试的情况下让你的网站正常工作吗?如果可以的话,我建议你将其关闭... - Nic Wortel
显示剩余3条评论

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