本番環境でSymfony2のプロファイラーを無効にする方法は?
私はツールバーを意味するのではなく、プロファイラーを意味します。
本番環境で無効にしたいのですが、開発に広く使用しているので、バンドルを削除するソリューションは不要です。
framework.profiler.only_exceptions
をtrueに設定してみました。 framework.profiler
セクションを完全に削除してみました。 everyリクエストおよびeveryレスポンスの後にprofiler.dbがどのように成長しているかに関係なく、x-debug-token
ヘッダーが含まれます。
設定ファイル(config.ymlとconfig_prod.yml)を再確認しましたが、すべて問題がないようです。
さらに、コマンドapp/console router:dump-Apache --no-debug
は常に_wdt
ルートと_profiler
ルートをダンプしますが、routing_prod.ymlにそれらがなく、アクセスしようとしたときに存在しないようです。ブラウザ(404)からそれらを。
私はsymfony2.0を実行していますが、2.1でいくつかの大きな変更があり、多くの要素を書き直す必要があるため、今はアップグレードしません。最初の展開の直前に開始するのは賢明ではありません。
Symfony 2.2以降、プロファイラーはフレームワークの構成でenabled
フラグをサポートし、test
環境ではデフォルトで無効になっています。
# app/config/config_test.yml
framework:
profiler:
enabled: false
詳細については、これを参照してください プロファイリングに関するブログエントリ Fabien Potencierによるおよび FrameworkBundle構成リファレンス 。
更新:このフラグは Symfony 4.0 でも引き続き有効です。
Symfony <= 2.1の場合、設定にframework.profiler
keyがない場合、プロファイラーは完全に無効になります。
これは、Symfony2 FrameworkBundle構成の ProfilerPass で確認できます。
これは、デフォルトの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が特定のアドレスからのものである場合、またはWebサイトの限られた部分について情報を取得したい場合はどうすればよいでしょうか?リクエストマッチャーを使用できます。
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の Configuration を調べたところ、プロファイラーconfノードにcanBeDisabled()
があることがわかりました。それから私はそれが何を意味するのかをチェックしました 正確に 。
各canBeDisabled
ノードには暗黙の子ノードenabled
があり、デフォルト値はtrue
に設定されていることがわかります。これをオーバーライドするか、親ノードを直接false
またはnull
に設定して、セクションを無効にすることができます。プロファイラーセクションを単に省略すると、デフォルトで有効になります。
たぶん私はドキュメントでそれを見逃しました、しかし私はそれが言及されるべきであるとかなり確信しています ここ 。また、私の意見では、プロファイラーは本番環境ではデフォルトで無効になっているはずです。長期的に本番環境でプロファイラーを実行することが有益であるシナリオを想像することはできません。誰かが私を間違っていると証明してくれたら嬉しいです。
ところで、_profiler.db
_が大きくなると、各リクエストが遅くなることに気づきましたが、prodではそうではない場合があります。