Newrelic via Heroku不';虽然preload_app=true,但无法从运行在Unicorn中的Ruby实例接收数据

Newrelic via Heroku不';虽然preload_app=true,但无法从运行在Unicorn中的Ruby实例接收数据,ruby,heroku,unicorn,newrelic,grape,Ruby,Heroku,Unicorn,Newrelic,Grape,我正在heroku上运行一个带有grape(无rails)的ruby应用程序,并且正在使用new relic插件。该应用程序由unicorn提供。如上所述,我将此选项集成到配置中。以下是我的设置: unicorn.rb: worker_processes 3 preload_app true timeout 30 config.ru: if ENV['RACK_ENV'] == 'production' require 'newrelic_rpm' end heroku上的环境设置为生产

我正在heroku上运行一个带有grape(无rails)的ruby应用程序,并且正在使用new relic插件。该应用程序由unicorn提供。如上所述,我将此选项集成到配置中。以下是我的设置:

unicorn.rb:
worker_processes 3
preload_app true
timeout 30

config.ru:
if ENV['RACK_ENV'] == 'production'
  require 'newrelic_rpm'
end
heroku上的环境设置为生产环境,因此应正确包含该文件。此外,heroku日志文件表明new relic代理已成功启动:

2013-04-08T10:47:47+00:00 heroku[deployhooks]: Notified New Relic about the deploy
2013-04-08T10:47:49+00:00 app[web.1]: ** [NewRelic][04/08/13 10:47:49 +0000 eea5ecfd-86be-4b88-8b2a-6b7564aa9943 (2)] INFO : Reading configuration from config/newrelic.yml
2013-04-08T10:47:49+00:00 app[web.1]: ** [NewRelic][04/08/13 10:47:49 +0000 eea5ecfd-86be-4b88-8b2a-6b7564aa9943 (2)] INFO : Environment: production
2013-04-08T10:47:49+00:00 app[web.1]: ** [NewRelic][04/08/13 10:47:49 +0000 eea5ecfd-86be-4b88-8b2a-6b7564aa9943 (2)] INFO : Dispatcher: unicorn
2013-04-08T10:47:49+00:00 app[web.1]: ** [NewRelic][04/08/13 10:47:49 +0000 eea5ecfd-86be-4b88-8b2a-6b7564aa9943 (2)] INFO : Application: mobile-v1-ruby
2013-04-08T10:47:49+00:00 app[web.1]: ** [NewRelic][04/08/13 10:47:49 +0000 eea5ecfd-86be-4b88-8b2a-6b7564aa9943 (2)] INFO : Connecting workers after forking.
2013-04-08T10:47:49+00:00 app[web.1]: ** [NewRelic][04/08/13 10:47:49 +0000 eea5ecfd-86be-4b88-8b2a-6b7564aa9943 (2)] INFO : Installing Net instrumentation
2013-04-08T10:47:49+00:00 app[web.1]: ** [NewRelic][04/08/13 10:47:49 +0000 eea5ecfd-86be-4b88-8b2a-6b7564aa9943 (2)] INFO : Installing Unicorn instrumentation
2013-04-08T10:47:49+00:00 app[web.1]: ** [NewRelic][04/08/13 10:47:49 +0000 eea5ecfd-86be-4b88-8b2a-6b7564aa9943 (2)] INFO : Detected Unicorn, please see additional documentation: https://newrelic.com/docs/troubleshooting/im-using-unicorn-and-i-dont-see-any-data
2013-04-08T10:47:49+00:00 app[web.1]: ** [NewRelic][04/08/13 10:47:49 +0000 eea5ecfd-86be-4b88-8b2a-6b7564aa9943 (2)] INFO : Finished instrumentation
2013-04-08T10:47:49+00:00 app[web.1]: Hey there - I started in environment: production
2013-04-08T10:47:49+00:00 app[web.1]: I, [2013-04-08T10:47:49.798057 #2]  INFO -- : listening on addr=0.0.0.0:58224 fd=9
2013-04-08T10:47:49+00:00 app[web.1]: I, [2013-04-08T10:47:49.798299 #2]  INFO -- : worker=0 spawning...
2013-04-08T10:47:49+00:00 app[web.1]: I, [2013-04-08T10:47:49.809140 #2]  INFO -- : worker=1 spawning...
2013-04-08T10:47:49+00:00 app[web.1]: I, [2013-04-08T10:47:49.812632 #5]  INFO -- : worker=0 spawned pid=5
2013-04-08T10:47:49+00:00 app[web.1]: I, [2013-04-08T10:47:49.816144 #2]  INFO -- : worker=2 spawning...
2013-04-08T10:47:49+00:00 app[web.1]: I, [2013-04-08T10:47:49.819594 #5]  INFO -- : worker=0 ready
2013-04-08T10:47:49+00:00 app[web.1]: I, [2013-04-08T10:47:49.821252 #9]  INFO -- : worker=1 spawned pid=9
2013-04-08T10:47:49+00:00 app[web.1]: I, [2013-04-08T10:47:49.823869 #2]  INFO -- : master process ready
2013-04-08T10:47:49+00:00 app[web.1]: I, [2013-04-08T10:47:49.826441 #9]  INFO -- : worker=1 ready
2013-04-08T10:47:49+00:00 app[web.1]: I, [2013-04-08T10:47:49.831072 #13]  INFO -- : worker=2 spawned pid=13
2013-04-08T10:47:49+00:00 app[web.1]: I, [2013-04-08T10:47:49.836053 #13]  INFO -- : worker=2 ready
2013-04-08T10:47:50+00:00 heroku[web.1]: State changed from starting to up
对我来说,一切似乎都很好。但在new relic上,我只收到部署通知。有人有主意吗

非常感谢。

New Relic(目前)没有葡萄自动检测功能,所以您可能不得不这样做。它应该只是一个包含在Grape::API类中的问题:

class My::API < Grape::API
  include NewRelic::Agent::Instrumentation::Rack

  # ...

end
class My::API

对于更深入的细节,这是一个很好的开始。

我现在能够解决它。谢谢你们的帮助,伙计们!它使用开发者模式grape请求显示,以及数据库请求通过mongoid发送到mongodb

猜猜看:最糟糕的问题之一是我的条件加载中的字符串比较:

if ENV['RACK_ENV'] == "production"
=的quals似乎不起作用。我把它改为.eql?()方法,再加上一些用newrelic仪器重新加载的东西,现在一切都神奇地工作了:D真棒

if ENV['RACK_ENV'].eql?("production")
以下是我的工作设置:

Gemfile

gem "newrelic-grape"
gem "newrelic_moped"
gem "newrelic_rpm"
config.ru

run MyApp.new

if ENV["NEW_RELIC_ENABLE"].eql?("true")

    if ENV["RACK_ENV"].eql?("development")
      puts "Loading NewRelic in developer mode ..."
      require "new_relic/rack/developer_mode"
      use NewRelic::Rack::DeveloperMode
    end

    if !ENV["RACK_ENV"].eql?("test")
        NewRelic::Agent.manual_start
        DependencyDetection.detect!
    end

end
如果正确定义了RACK_ENV,则在开发者模式下加载new relic。否则,它会定期启动,除非处于测试模式

这里最大的问题是缺少命令NewRelic::Agent.manual_startDependencyDetection.detect

如果启用了new relic,api.rb类现在包括机架检测

api.rb

if !ENV['RACK_ENV'].eql?("test") && ENV['NEW_RELIC_ENABLE'].eql?("true")
    include NewRelic::Agent::Instrumentation::Rack
end

我还发现有一个gem,它的自述文件引用了一个,看起来它正好描述了你想要的东西。非常感谢。我试试看,然后再报告!