New Relic ActiveRecord :: ConnectionNotEstablised Rails 3.2.3错误

时间:2012-11-20 09:25:55

标签: ruby-on-rails-3 activerecord heroku newrelic

我刚刚在我的RefineryCMS Rails 3.2.3应用程序中安装了newrelic_rpm gem。我按照说明复制了newrelic.yml配置文件。我的应用程序正在使用Heroku在Cedar堆栈上进行部署,因此说明非常简单。

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错误(根本没有提到新遗物的错误痕迹)?

1 个答案:

答案 0 :(得分:0)

您遇到的问题看起来像是newrelic_rpm gem中的一个错误,该错误是我们(我在New Relic工作)最近的3.6.4版本解决的。我建议您尝试更新到3.6.4以查看问题是否仍然存在。

作为解释:我们在newrelic_rpm gem中有一些名为EnvironmentReport的东西,它收集有关您的应用程序正在执行的环境的信息(Rails版本,gem版本,数据库适配器,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中可能存在类似的竞争条件。