3

私の Sinatra アクションの 1 つは、別のリクエストを使用して実行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) で問題なく動作します。

2 つの推奨事項:

  • Ruby のバージョンを更新する
  • 宝石を更新する

これらが役に立たない場合は、ポートをバインドしているプログラムを確認してくださいsudo netstat -nlp

これらすべてが役に立たない場合は、セットアップについて詳しく教えてください。

于 2014-02-06T19:07:30.190 に答える