Как отключить профилировщик в Symfony2 в производстве?
Как отключить профилировщик в Symfony2 в производстве?
Я не имею в виду панель инструментов - я имею в виду профилировщик.
Я хочу отключить его в производстве, я широко использую его для разработки, поэтому решение с удалением его пакета не работает.
Я попытался установить framework.profiler.only_exceptions
значение true. Я попытался удалить в целом. Независимо от того, что профилировщик.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 для получения более подробной информации.
Update: этот флаг по-прежнему действителен в в Symfony 4.0.
Symfony
в Symfony framework.profilerключ в конфигурации.
вы можете увидеть это в ProfilerPass конфигурации Symfony2 FrameworkBundle.
это относится к умолчанию config.yml
и config_prod.yml
(включая бывших). Поэтому, если вы не возились с конфигурациями по умолчанию, вы штраф.
на значение по умолчанию:
framework:
profiler: { only_exceptions: false }
который включает профилирование для dev
окружающая среда и все среды, которые импортируют config_dev.yml
как config_test.yml
.
если вы хотите снять значение профилировщика в последующей конфигурации, используйте:
framework:
profiler: false
значения {}
или ~
не установлено значение. Вы должны использовать false
.
вы пробовали это (включить только для разработки)
поскольку профилировщик добавляет некоторые накладные расходы, вы можете включить его только при определенных обстоятельствах в производственной среде. Этот только-параметры исключений ограничивают профилирование до 500 страниц, но что, если вы хотите получить информацию, когда IP-адрес клиента поступает из определенного адрес или ограниченная часть веб-сайта? Вы можете использовать запрос matcher:
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();
}
я понял это, но все же я не уверен, почему настройки профилировщика не работали. Я очистил кэш с помощью --no-debug
после каждого изменения конфигурации.
сначала я осмотрел конфигурация FrameworkBundle и узнал, что узел profiler conf имеет canBeDisabled()
. Затем я проверил, что это значит ровно.
оказывается, что каждый canBeDisabled
узел имеет подразумеваемый дочерний узел enabled
со значением по умолчанию true
. Вы можно либо переопределить его, либо установить родительский узел непосредственно в false
или null
отключить разделе. Если вы просто опустите раздел профилировщика, он будет включен по умолчанию.
может быть, я пропустил это в документации, но я уверен, что это должно быть упомянуто здесь. Кроме того, на мой взгляд, profiler должен быть отключен по умолчанию в производстве. Я не могу представить себе сценарий, когда было бы полезно запустить profiler в производстве в долгосрочной перспективе. Я буду счастлив, если кто-то докажет я ошибаюсь.
кстати, я заметил тогда как profiler.db
растет, тогда каждый запрос становится медленнее, но это может быть не так в prod.