2012-12-08 22 views
3

我的一个辛纳屈的动作进行使用net/http另一个请求并基于响应一句:剖析西纳特拉与机架perftools_profiler(使用net/HTTP)

api_response = Net::HTTP.get_response(uri) 

它的工作原理就像一个魅力,但是当我尝试剖析这一点:

configure do 
    use ::Rack::PerftoolsProfiler, default_printer: 'pdf', frequency: 4000, mode: :walltime 
end 

(并把?profile=true到请求的PARAMS我得到这个:

Errno::EADDRINUSE - Address already in use - connect(2): 
    /Users/tomek/.rvm/rubies/ruby-1.9.3-p286/lib/ruby/1.9.1/net/http.rb:762:in `initialize' 
    /Users/tomek/.rvm/rubies/ruby-1.9.3-p286/lib/ruby/1.9.1/net/http.rb:762:in `open' 
    /Users/tomek/.rvm/rubies/ruby-1.9.3-p286/lib/ruby/1.9.1/net/http.rb:762:in `block in connect' 
    /Users/tomek/.rvm/rubies/ruby-1.9.3-p286/lib/ruby/1.9.1/timeout.rb:54:in `timeout' 
    /Users/tomek/.rvm/rubies/ruby-1.9.3-p286/lib/ruby/1.9.1/timeout.rb:99:in `timeout' 
    /Users/tomek/.rvm/rubies/ruby-1.9.3-p286/lib/ruby/1.9.1/net/http.rb:762:in `connect' 
    /Users/tomek/.rvm/rubies/ruby-1.9.3-p286/lib/ruby/1.9.1/net/http.rb:755:in `do_start' 
    /Users/tomek/.rvm/rubies/ruby-1.9.3-p286/lib/ruby/1.9.1/net/http.rb:744:in `start' 
    /Users/tomek/.rvm/rubies/ruby-1.9.3-p286/lib/ruby/1.9.1/net/http.rb:454:in `get_response' 

任何想法发生了什么?

+1

我从错误“地址已在使用中”猜测,其他的东西正在使用你试图运行你的分析器的端口。确保你没有在同一个端口上运行其他的东西。 – theabraham

+0

是否可以在特定端口上设置分析器? –

+0

尝试使用'set:port,9494'更改Sinatra的端口。 – theabraham

回答

0

我尝试设置这些和你一样。

require 'sinatra' 
require 'rack/perftools_profiler' 
require 'net/http' 

configure do 
    use ::Rack::PerftoolsProfiler, default_printer: 'pdf', frequency: 4000, mode: :walltime 
end 

get "/" do 
    uri = URI('http://google.com') 
    api_response = Net::HTTP.get_response(uri) 
end 

它在ruby 1.9.3-p286和rack-perftools_profiler(0.6.1)上运行时出现问题。

两个建议:

  • 更新你的Ruby版本
  • 更新你的宝石

如果这些不帮助检查哪个程序绑定你的端口sudo netstat -nlp

如果这些都没有帮助,请告诉我们更多关于你的设置。