如何在生产中禁用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中的一些重大更改需要重写许多元素。在初始部署之前启动它是不明智的。
答案 0 :(得分:14)
从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中如果配置中没有framework.profiler
密钥,则完全禁用分析器。
您可以在Symfony2 FrameworkBundle配置的ProfilerPass中看到这一点。
默认config.yml
和config_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
。您可以覆盖它或将父节点直接设置为false
或null
以禁用该部分。如果您只是省略了探查器部分,则默认情况下会启用它。
也许我在文档中错过了它,但我很确定应该提到它here。另外,在我看来,在生产中默认情况下应禁用分析器。我无法想象从长远来看在生产中运行分析器是有益的。如果有人证明我错了,我会很高兴。
BTW我注意到随着profiler.db
的增长,每个请求都会变慢,但在prod中可能不是这样。