Как отключить профилировщик в 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.

Другие вопросы по тегам