2

リクエストごとに変更される newrelic が原因で JavaScript が挿入されるため、ページのコンテンツが変更され、毎回新しい etag が強制的に生成されます。

Rack::Etag ミドルウェアが newrelic ミドルウェアの前にある必要があることは理解していますが、newrelic ミドルウェアが見つかりません。newrelic_rpm のドキュメントによると、Rails の場合、gem にはミドルウェアが含まれますが、rake ミドルウェアを実行すると、newrelic ミドルウェアが表示されません。

自分でミドルウェアを追加できますが、もっと良い方法はありますか?

4

2 に答える 2

9

私はニューレリックで働いています。

実行時に New Relic のミドルウェアが表示されない理由rake middlewareは、条件付きでミドルウェア スタックに挿入されるためです。これらのミドルウェアは、エージェントが現在の環境で実行するように構成されている場合にのみ挿入されます。rake タスクの開始時にコマンドラインで設定することにより、実行時に New Relic のミドルウェアを強制的に挿入してrake middleware、ミドルウェア スタックを検査することができます。NEW_RELIC_AGENT_ENABLED=true

次のコードを追加するconfig/application.rbと、ブラウザ監視ミドルウェアが動的コンテンツを挿入する前に、Rack::ETag ミドルウェアが ETag を計算して挿入できるようになります。

 config.after_initialize do
      config.middleware.delete "Rack::ETag"
      config.middleware.insert_after "NewRelic::Rack::BrowserMonitoring", "Rack::ETag"
    end

ミドルウェアによって応答に挿入される JavaScript コードNewRelic::Rack::BrowserMonitoringが動的である理由は、サーバー側で応答が生成されるまでにかかった時間と、(該当する場合) Rails スタックに到達するまでにキューに入れられた時間のタイミングが含まれているためです。これらのタイミングは、着信リクエストごとに異なります。動的情報が挿入される前にページ コンテンツのハッシュに基づいて ETag が生成される場合、応答がキャッシュから処理されるときに古いサーバー側のタイミングが使用される可能性があります。これが New Relic によってどのように処理されるかについての詳細は、https ://newrelic.com/docs/features/how-does-real-user-monitoring-work#cached-pages で読むことができます。

これは、ミドルウェアを正しく注文するための優れた概要でもあります: http://verboselogging.com/2010/01/20/proper-rack-middleware-ordering

さらに詳細なヘルプが必要な場合は、support@newrelic.com にメールでチケットを送信してください。

于 2013-08-27T23:38:26.187 に答える
3

別のオプション:

  1. browser_monitoring.auto_instrument: falseBrowserMonitoring ミドルウェアの自動挿入を無効にするには、newrelic.yml ファイルに設定します。
  2. 次のコードを config/application.rb に追加します。

    config.middleware.delete "Rack::ETag"

    require 'new_relic/rack/browser_monitoring'

    config.middleware.use NewRelic::Rack::BrowserMonitoring

    config.middleware.use "Rack::ETag"

これにより、ETag ミドルウェアが削除され、BrowserMonitoring ミドルウェアが追加され、次に ETag ミドルウェアが再度追加されて、BrowserMonitoring が動的ペイロードを挿入する前に実行されるようになります。

于 2014-01-02T20:05:05.037 に答える