3

我的 Sinatra 操作之一使用响应执行另一个请求net/http并根据响应计算某些内容:

api_response = Net::HTTP.get_response(uri)

它就像一种魅力,但是当我尝试对此进行分析时:

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

(并放入?profile=true请求的参数中,我得到了这个:

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'

知道发生了什么吗?

4

1 回答 1

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) 上运行没有问题。

两个建议:

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

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

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

于 2014-02-06T19:07:30.190 回答