如何在生产中禁用Symfony2中的分析器?

时间:2012-12-16 13:54:34

标签: php symfony symfony-2.0

如何在生产中禁用Symfony2中的分析器?

我不是指工具栏 - 我的意思是探查器。

我想在生产中禁用它,我将其广泛用于开发,因此删除其捆绑包的解决方案是不行的。

我尝试将framework.profiler.only_exceptions设为true。我试过完全删除framework.profiler部分。无论在每个请求之后profiler.db正在增长,每个响应都包含x-debug-token标头。

我已经仔细检查了配置文件(config.yml和config_prod.yml),一切似乎都被罚款了。

命令app/console router:dump-apache --no-debug总是转储_wdt_profiler路由,但是我的routing_prod.yml中没有它们,并且它们似乎不存在试图从浏览器访问它们(404)。

我正在运行symfony 2.0,我现在不会升级,因为2.1中的一些重大更改需要重写许多元素。在初始部署之前启动它是不明智的。

3 个答案:

答案 0 :(得分:14)

Symfony> = 2.2

从Symfony 2.2开始,探查器在框架的配置中支持enabled标志,默认情况下在test环境中被禁用。

# app/config/config_test.yml
framework:
    profiler:
        enabled: false

Fabien Potencier和Blog entry about Profiling查看此FrameworkBundle configuration reference了解更多详情。

更新:此标志在Symfony 4.0中仍然有效。


Symfony< = 2.1

在Symfony< = 2.1中如果配置中没有framework.profiler密钥,则完全禁用分析器。

您可以在Symfony2 FrameworkBundle配置的ProfilerPass中看到这一点。

默认config.ymlconfig_prod.yml(包括前者)就是这种情况。所以,如果你没有修改默认配置,那就没事了。

config_dev.yml中,默认设置为:

framework:
    profiler: { only_exceptions: false }

可以对dev环境和导入config_dev.yml config_test.yml的所有环境进行分析。

如果要在后续配置中取消设置探查器值,请使用:

framework:
    profiler: false

{}~等值不会取消设置该值。您必须使用false

答案 1 :(得分:2)

您是否尝试过此操作(仅适用于开发)

  

由于分析器增加了一些开销,您可能只想启用它   在生产环境中的某些情况下。该   only-exceptions设置将分析限制为500页,但是如果   您希望在客户端IP来自特定的IP时获取信息   地址,或网站的有限部分?你可以使用   请求匹配器:

framework:
    profiler:
        matcher: { ip: 192.168.0.0/24 }

http://symfony.com/doc/current/book/internals.html#profiler

可以通过执行以下操作来基于每个操作禁用分析器:

if(in_array($this->container->get('kernel')->getEnvironment(), array('prod'))) {
    $this->container->get('profiler')->disable();
}

答案 2 :(得分:1)

我想通了,但我仍然不确定为什么探查器设置不起作用。每次更改配置后,我都会使用--no-debug清除缓存。

首先,我检查了FrameworkBundle的Configuration,发现profiler conf节点有canBeDisabled()。然后我检查了它是什么意思exactly

事实证明,每个canBeDisabled节点都有一个隐含的子节点enabled,其默认值设置为true。您可以覆盖它或将父节点直接设置为falsenull以禁用该部分。如果您只是省略了探查器部分,则默认情况下会启用它。

也许我在文档中错过了它,但我很确定应该提到它here。另外,在我看来,在生产中默认情况下应禁用分析器。我无法想象从长远来看在生产中运行分析器是有益的。如果有人证明我错了,我会很高兴。

BTW我注意到随着profiler.db的增长,每个请求都会变慢,但在prod中可能不是这样。