2012-12-08 25 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

如果這些都沒有幫助,請告訴我們更多關於你的設置。