15

如何在生产中禁用 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 中的一些重大更改需要重写许多元素。在初始部署之前启动它是不明智的。

4

3 回答 3

15

Symfony >= 2.2

从 Symfony 2.2 开始,分析器支持enabled框架配置中的标志,并且在test环境中默认禁用。

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

有关更多详细信息,请参阅Fabien Potencier 的有关 Profiling 的博客条目和FrameworkBundle 配置参考

更新:这个标志在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.

于 2013-01-30T11:58:28.503 回答
2

你试过这个吗(只为开发启用)

由于分析器增加了一些开销,您可能只想在生产环境中的某些情况下启用它。唯一例外设置将分析限制为 500 个页面,但是如果您想在客户端 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();
}
于 2012-12-16T14:19:41.487 回答
1

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

首先,我检查了FrameworkBundle 的配置,发现 profiler conf 节点有canBeDisabled(). 然后我检查了它的确切含义。

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

也许我在文档中错过了它,但我很确定应该在这里提到它。此外,在我看来,探查器应该在生产中默认禁用。从长远来看,我无法想象在生产环境中运行分析器会有什么好处。如果有人证明我错了,我会很高兴。

顺便说一句,我注意到随着请求的profiler.db增长,每个请求都会变慢,但在 prod 中可能并非如此。

于 2012-12-16T18:23:45.403 回答