web-dev-qa-db-ja.com

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

本番環境で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でいくつかの大きな変更があり、多くの要素を書き直す必要があるため、今はアップグレードしません。最初の展開の直前に開始するのは賢明ではありません。

15
pinkeen

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.profilerkeyがない場合、プロファイラーは完全に無効になります。

これは、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を使用する必要があります。

14
flu

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

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

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

まず、FrameworkBundleの Configuration を調べたところ、プロファイラーconfノードにcanBeDisabled()があることがわかりました。それから私はそれが何を意味するのかをチェックしました 正確に

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

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

ところで、_profiler.db_が大きくなると、各リクエストが遅くなることに気づきましたが、prodではそうではない場合があります。

1
pinkeen