15

本番環境でSymfony2のプロファイラーを無効にする方法は?

私はツールバーを意味するのではなく、プロファイラーを意味します。

本番環境で無効にしたいのですが、開発に広く使用しているので、バンドルを削除するという解決策はありません。

framework.profiler.only_exceptionstrueに設定してみました。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)。

私はsymfony2.0を実行していますが、2.1でいくつかの大きな変更があり、多くの要素を書き直す必要があるため、今はアップグレードしません。最初の展開の直前に開始するのは賢明ではありません。

4

3 に答える 3

15

symfony> = 2.2

Symfony 2.2以降、プロファイラーはenabledフレームワークの構成でフラグをサポートし、test環境ではデフォルトで無効になっています。

# app/config/config_test.yml
framework:
    profiler:
        enabled: false

詳細については、FabienPotencierによるプロファイリングおよびFrameworkBundle構成リファレンスに関するこのブログエントリを参照してください。

更新:このフラグはSymfony4.0でも引き続き有効です。


symfony <= 2.1

framework.profilerSymfony <= 2.1の場合、設定にキーがない場合、プロファイラーは完全に無効になります。

これは、Symfony2FrameworkBundle構成のProfilerPassで確認できます。

これはデフォルトconfig.ymlconfig_prod.yml(前者を含む)の場合です。したがって、デフォルトの構成をいじくり回さなかった場合は問題ありません。

config_dev.ymlただし、デフォルト設定は次のとおりです。

framework:
    profiler: { only_exceptions: false }

これにより、のようdevにインポートされる環境およびすべての環境のプロファイリングが可能になります。config_dev.ymlconfig_test.yml

後続の構成でプロファイラー値の設定を解除する場合は、次を使用します。

framework:
    profiler: false

のような値、{}または値~の設定を解除しない値。を使用する必要がありますfalse

于 2013-01-30T11:58:28.503 に答える
2

これを試しましたか(開発のみを有効にします)

プロファイラーはオーバーヘッドを追加するため、実稼働環境の特定の状況でのみ有効にすることをお勧めします。唯一の例外設定では、プロファイリングが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();
}
于 2012-12-16T14:19:41.487 に答える
1

私はそれを理解しましたが、それでもプロファイラー設定が機能しなかった理由がわかりません。構成を変更するたびに、キャッシュをクリアしました--no-debug

まず、FrameworkBundleの構成canBeDisabled()を調べたところ、プロファイラーのconfノードにが含まれていることがわかりました。次に、それが正確に何を意味するのかを確認しました。

各ノードには、デフォルト値がに設定されcanBeDisabledた暗黙の子ノードがあることがわかります。これをオーバーライドするか、親ノードを直接セクションに設定するか、セクションを無効にすることができます。プロファイラーセクションを単に省略すると、デフォルトで有効になります。enabledtruefalsenull

たぶん私はドキュメントでそれを見逃しました、しかし私はそれがここで言及されるべきであるとかなり確信しています。また、私の意見では、プロファイラーは本番環境ではデフォルトで無効になっているはずです。長期的に本番環境でプロファイラーを実行することが有益であるシナリオを想像することはできません。誰かが私を間違っていると証明してくれたら嬉しいです。

ところで、私はprofiler.db成長するにつれて各リクエストが遅くなることに気づきましたが、prodではそうではないかもしれません。

于 2012-12-16T18:23:45.403 に答える