Как отключить профилировщик в Symfony2 на производстве?
Как отключить профилировщик в Symfony2 на производстве?
Я не имею в виду панель инструментов - я имею в виду профилировщик.
Я хочу отключить его в производственной среде, я широко использую его для разработки, поэтому решение по удалению пакета не требуется.
Я пробовал настройку framework.profiler.only_exceptions
к истине. Я пытался удалить 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 ответа
Symfony >= 2.2
Начиная с Symfony 2.2, профилировщик поддерживает enabled
флаг в конфигурации платформы и по умолчанию отключен в test
среда.
# app/config/config_test.yml
framework:
profiler:
enabled: false
См. Эту запись в блоге о профилировании от Fabien Potencier и ссылку на конфигурацию FrameworkBundle для получения дополнительной информации.
Обновление: этот флаг все еще действует в Symfony 4.0.
Symfony <= 2.1
В Symfony <= 2.1 Профилировщик отключен полностью, если нет framework.profiler
введите конфигурацию.
Вы можете увидеть это в ProfilerPass конфигурации Symfony2 FrameworkBundle.
Это случай по умолчанию config.yml
а также config_prod.yml
(который включает в себя первое). Так что, если вы не возились с настройками по умолчанию, у вас все в порядке.
В config_dev.yml
однако настройка по умолчанию:
framework:
profiler: { only_exceptions: false }
Что позволяет профилировать для dev
окружающая среда и все среды, которые импортируют config_dev.yml
лайк config_test.yml
,
Если вы хотите сбросить значение профилировщика в последующей конфигурации, используйте:
framework:
profiler: false
Значения как {}
или же ~
не будет сбрасывать значение Вы должны использовать false
,
Вы пробовали это (включить только для разработки)
Поскольку профилировщик добавляет некоторые накладные расходы, вы можете включить его только при определенных обстоятельствах в производственной среде. Настройки единственных исключений ограничивают профилирование до 500 страниц, но что, если вы хотите получить информацию, когда IP-адрес клиента приходит с определенного адреса или для ограниченной части веб-сайта? Вы можете использовать запрос соответствия:
framework:
profiler:
matcher: { ip: 192.168.0.0/24 }
http://symfony.com/doc/current/book/internals.html
или же
профилировщик можно отключить для каждого действия, выполнив что-то вроде:
if(in_array($this->container->get('kernel')->getEnvironment(), array('prod'))) {
$this->container->get('profiler')->disable();
}
Я понял это, но все еще я не уверен, почему настройки профилировщика не работали. Я очистил кеш с --no-debug
после каждого изменения конфигурации.
Сначала я проверил конфигурацию FrameworkBundle и обнаружил, что узел conf профилировщика имеет canBeDisabled()
, Затем я проверил, что это значит точно.
Оказывается, что каждый canBeDisabled
узел имеет подразумеваемый дочерний узел enabled
со значением по умолчанию, установленным на true
, Вы можете либо переопределить его, либо установить родительский узел напрямую false
или же null
отключить раздел. Если вы просто пропустите раздел профилировщика, то он будет включен по умолчанию.
Возможно я пропустил это в документах, но я почти уверен, что это должно быть упомянуто здесь. Также, по моему мнению, профилировщик должен быть отключен по умолчанию в производстве. Я не могу представить сценарий, когда в долгосрочной перспективе было бы полезно запустить профилировщик в производстве. Я буду счастлив, если кто-нибудь докажет, что я неправ.
Кстати, я заметил тогда, как profiler.db
растет, тогда каждый запрос становится медленнее, но это может быть не так в Prod.