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