1

Heroku アプリで newrelic_rpm gem を 3.5.8.72 から 3.6.1.88 にアップデートしてから、rake タスクで newrelic がロードされ、奇妙なエラーが発生することに気付きました。

rake aborted!
undefined method `before_save' for #<Class:0x00000003d2f908>
/app/vendor/bundle/ruby/1.9.1/gems/activerecord-3.2.13/lib/active_record/dynamic_matchers.rb:55:in `method_missing'
/app/vendor/bundle/ruby/1.9.1/gems/activerecord-3.2.13/lib/active_record/session_store.rb:90:in `<class:Session>'
/app/vendor/bundle/ruby/1.9.1/gems/activerecord-3.2.13/lib/active_record/session_store.rb:79:in `<class:SessionStore>'
/app/vendor/bundle/ruby/1.9.1/gems/activerecord-3.2.13/lib/active_record/session_store.rb:53:in `<module:ActiveRecord>'
/app/vendor/bundle/ruby/1.9.1/gems/activerecord-3.2.13/lib/active_record/session_store.rb:3:in `<top (required)>'
/app/vendor/bundle/ruby/1.9.1/gems/railties-3.2.13/lib/rails/application/configuration.rb:138:in `session_store'
/app/vendor/bundle/ruby/1.9.1/gems/railties-3.2.13/lib/rails/application.rb:273:in `block in default_middleware_stack'
/app/vendor/bundle/ruby/1.9.1/gems/railties-3.2.13/lib/rails/application.rb:237:in `tap'
/app/vendor/bundle/ruby/1.9.1/gems/railties-3.2.13/lib/rails/application.rb:237:in `default_middleware_stack'
/app/vendor/bundle/ruby/1.9.1/gems/railties-3.2.13/lib/rails/engine.rb:469:in `app'
...

問題が newrelic_rpm に起因することは確かなので、どうすれば rake タスクでそれを無効にできるのでしょうか。

https://newrelic.com/docs/ruby/forcing-the-ruby-agent-to-startで ENV 変数を設定してみましたが、webapp の newrelic も無効になります。すべての rake タスクに ENV 変数を設定する方法はありますが、ウェブサーバーではなく rake でのみ設定できますか?

よろしくお願いします!

4

1 に答える 1

3

最適なソリューションは、rake タスクの実行方法によって異なります。たとえば、これを cronjob から実行している場合はNEWRELIC_ENABLE=false、rake タスクの cron エントリに追加できます。

rake タスクを手動で実行している場合は、newrelic.yml ファイルに以下を追加する必要があります。

autostart.blacklisted_executables: rake

これにより、実行可能ファイルが rake と呼ばれるインスタンスでエージェントが起動するのを防ぎます。New Relic の起動を阻止したい他の実行可能ファイルがある場合は、これをコンマ区切りのリストにすることもできます。

于 2013-05-17T22:00:37.993 に答える