0

Newrelic_rpmgemをRefineryCMSRails3.2.3アプリケーションにインストールしました。指示に従って、newrelic.yml設定ファイルにコピーしました。私のアプリはCedarスタックにHerokuを使用してデプロイされているため、手順は非常に簡単でした。

https://devcenter.heroku.com/articles/newrelic#cedar

ただし、開発ボックスで「rails server」を実行すると、次のエラーメッセージが表示されました。

/home/xxx/.rvm/gems/ruby-1.9.2-p290/gems/activerecord-3.2.3/lib/active_record/connection_adapters/abstract/connection_pool.rb:398:in `retrieve_connection': ActiveRecord::ConnectionNotEstablished (ActiveRecord::ConnectionNotEstablished)

newrelic.ymlファイルでagent_enabled値を「false」に設定すると、サーバーを再起動できるようになりました。ライセンスキーとアプリ名の環境変数を設定しても違いはありません。

興味深いことに、開発ボックスでアプリを起動できませんでしたが、Herokuにデプロイすると、すべてが正常に機能し、新しいRelic統計を取得しています。素晴らしい!

私の回避策は、gemfileからnewrelic_rpmを削除し(これはインストール手順で実行するように指示されています)、:productionグループにのみ配置することです。明らかに、新しい遺物は本番環境でのみ役立つので、大したことではありません。

group :production do
  ... other gems
  gem 'newrelic_rpm'
end

他の誰かがこれを経験したことがありますか、またはそれがActiveRecordエラーを引き起こしている理由を知っていますか(新しい遺物のエラートレースにはまったく言及されていません)?

4

1 に答える 1

0

あなたが遭遇した問題は、私たち (私は New Relic で働いています) の最近の 3.6.4 リリースで対処された newrelic_rpm gem のバグのようです。3.6.4 にアップデートして、問題が解決しないかどうかを確認することをお勧めします。

説明として、newrelic_rpm gem には EnvironmentReport と呼ばれるものがあり、アプリケーションが実行されている環境 (Rails バージョン、gem バージョン、DB アダプター、Ruby バージョンなど) に関する情報を収集して UI に表示します。newrelic_rpm gem のバージョン 3.6.0 では、EnvironmentReport の生成をバックグラウンド スレッドにプッシュしました。EnvironmentReport はActiveRecord::Base定数を参照する可能性があるため、それを生成すると、スレッドセーフではない ActiveRecord 初期化コード パスがトリガーされる可能性があります。EnvironmentReport がたまたまActiveRecord::Base間違ったタイミングでヒットした場合、メイン スレッドで見たようなエラーが発生する可能性があります。

EnvironmentReport の生成をメイン スレッドに戻すことで、3.6.4 でこれに対処しました。

3.6.4 で問題が解決しない場合はお知らせください。

編集- うーん、3.6.0 がリリースされる前にこれについて尋ねたことに気付きました。newrelic_rpm の古いバージョンにも同様の競合状態が存在した可能性があるため、3.6.4 を試すことをお勧めします。

于 2013-06-18T18:46:46.610 に答える