【问题标题】:New Relic ActiveRecord::ConnectionNotEstablised Rails 3.2.3 errorNew Relic ActiveRecord::ConnectionNotEstablised Rails 3.2.3 错误
【发布时间】:2012-11-08 08:02:50
【问题描述】:

我刚刚在我的 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 的错误跟踪中根本没有提及)?

【问题讨论】:

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


    【解决方案1】:

    您遇到的问题看起来像是 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 中可能存在类似的竞争条件。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-07-20
      • 1970-01-01
      • 2013-07-05
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多