0

我刚刚在我的 RefineryCMS Rails 3.2.3 应用程序中安装了 newrelic_rpm gem。我按照说明复制了 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 时,一切正常——我现在得到了新的遗物统计信息。伟大的!

我的解决方法是从 gemfile 中删除 newrelic_rpm(这是安装说明所说的),并将其仅放入 :production 组。显然,新遗物只在生产中有用,所以没什么大不了的。

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

其他任何人都经历过这种情况,或者知道为什么它会导致 ActiveRecord 错误(在 new relic 的错误跟踪中根本没有提及)?

4

1 回答 1

0

您遇到的问题看起来像是 newrelic_rpm gem 中的一个错误,我们(我在 New Relic 工作)最近的 3.6.4 版本已经解决了这个问题。我建议您尝试更新到 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在错误的时间出现,它可能会触发错误,就像您在主线程上看到的那样。

我们在 3.6.4 中通过将 EnvironmentReport 的生成移回主线程来解决这个问题。

很抱歉让您头疼,如果 3.6.4 不能解决您的问题,请告诉我们。

编辑- 嗯,刚刚注意到您在 3.6.0 发布之前询问过这个问题。我仍然建议尝试 3.6.4,因为我怀疑旧版本的 newrelic_rpm 中可能存在类似的竞争条件。

于 2013-06-18T18:46:46.610 回答