我刚刚在我的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错误(根本没有提到新遗物的错误痕迹)?
答案 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中可能存在类似的竞争条件。