Подтвердить что ты не робот

Как отключить профилировщик в Symfony2 в производстве?

Как отключить профилировщик в Symfony2 в производстве?

Я не имею в виду панель инструментов - я имею в виду профайлер.

Я хочу отключить его в процессе производства, я использую его для разработки, поэтому решение с удалением его пакета - это не-go.

Я попытался установить 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, которые потребуют перезаписи многих элементов. Было бы неразумно запускать его непосредственно перед первоначальным развертыванием.

4b9b3361

Ответ 1

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.

Ответ 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();
}

Ответ 3

Я понял это, но все же я не уверен, почему настройки профилировщика не работали. После каждого изменения конфигурации я очистил кеш с помощью --no-debug.

Во-первых, я рассмотрел Configuration в файле FrameworkBundle и выяснил, что в профилировщике conf node есть canBeDisabled(). Затем я проверил, что это означает точно.

Оказывается, каждый canBeDisabled node имеет подразумеваемый дочерний node enabled со значением по умолчанию, установленным на true. Вы можете либо переопределить его, либо установить родительский node непосредственно на false или null, чтобы отключить этот раздел. Если вы просто опустите раздел профилировщика, то он по умолчанию включен.

Возможно, я пропустил это в документах, но я уверен, что здесь следует упомянуть здесь. Кроме того, по моему мнению, профилировщик должен быть отключен по умолчанию в производстве. Я не могу представить себе сценарий, когда было бы полезно запустить профилировщик в производстве в долгосрочной перспективе. Я буду рад, если кто-нибудь докажет мне, что я ошибаюсь.

Кстати, я заметил, что когда profiler.db растет, каждый запрос становится медленнее, но это может быть не так в prod.