2012-04-11 10 views
2

Ich habe ein Schienenprojekt und zwei Maschinen. Die eine läuft mit Ubuntu 10.04 und die andere mit 12.04 Beta. Ich bin mit dem 'fb_graph' Juwel an der 10,04-Maschine alles funktioniert gut, aber wenn ich auf die 12.04 Maschine Dinge wieHTTPClient :: ConnectTimeoutError bei Verwendung von 'fb_graph' gem

me = FbGraph :: User.me (Token) .fetch

ich

HTTPClient::ConnectTimeoutError: execution expired 
from /home/jan/.rvm/gems/[email protected]/gems/httpclient-2.2.4/lib/httpclient/session.rb:300:in `connect' 
from /home/jan/.rvm/gems/[email protected]/gems/httpclient-2.2.4/lib/httpclient/session.rb:300:in `ssl_connect' 
from /home/jan/.rvm/gems/[email protected]/gems/httpclient-2.2.4/lib/httpclient/session.rb:739:in `block in connect' 
from /home/jan/.rvm/gems/[email protected]/gems/httpclient-2.2.4/lib/httpclient/session.rb:731:in `connect' 
from /home/jan/.rvm/gems/[email protected]/gems/httpclient-2.2.4/lib/httpclient/session.rb:594:in `query' 
from /home/jan/.rvm/gems/[email protected]/gems/httpclient-2.2.4/lib/httpclient/session.rb:161:in `query' 
from /home/jan/.rvm/gems/[email protected]/gems/httpclient-2.2.4/lib/httpclient.rb:1060:in `do_get_block' 
from /home/jan/.rvm/gems/[email protected]/gems/httpclient-2.2.4/lib/httpclient.rb:869:in `block in do_request' 
from /home/jan/.rvm/gems/[email protected]/gems/httpclient-2.2.4/lib/httpclient.rb:956:in `protect_keep_alive_disconnected' 
from /home/jan/.rvm/gems/[email protected]/gems/httpclient-2.2.4/lib/httpclient.rb:868:in `do_request' 
from /home/jan/.rvm/gems/[email protected]/gems/httpclient-2.2.4/lib/httpclient.rb:756:in `request' 
from /home/jan/.rvm/gems/[email protected]/gems/httpclient-2.2.4/lib/httpclient.rb:661:in `get' 
from /home/jan/.rvm/gems/[email protected]/gems/fb_graph-2.4.10/lib/fb_graph/node.rb:49:in `block in get' 
from /home/jan/.rvm/gems/[email protected]/gems/fb_graph-2.4.10/lib/fb_graph/node.rb:122:in `handle_response' 
from /home/jan/.rvm/gems/[email protected]/gems/fb_graph-2.4.10/lib/fb_graph/node.rb:48:in `get' 
from /home/jan/.rvm/gems/[email protected]/gems/fb_graph-2.4.10/lib/fb_graph/node.rb:18:in `fetch' 
from (irb):10 
from /home/jan/.rvm/gems/[email protected]/gems/railties-3.2.0/lib/rails/commands/console.rb:47:in `start' 
from /home/jan/.rvm/gems/[email protected]/gems/railties-3.2.0/lib/rails/commands/console.rb:8:in `start' 
from /home/jan/.rvm/gems/[email protected]/gems/railties-3.2.0/lib/rails/commands.rb:41:in `<top (required)>' 
from script/rails:6:in `require' 
from script/rails:6:in `<main>' 

ich habe keine Ahnung, warum dies geschehen noch, wie ich es lösen könnte. Irgendwelche Ideen? Vielen Dank!

Jan

+0

die Zeitüberschreitung passiert jedes Mal hier ... haben Sie eine Lösung gefunden? – brauliobo

+0

oh, es war ein ipv6 Problem, löschte die ip mit dem 'sudo ifconfig eth1 inet6 del' – brauliobo

Antwort

0

Die HTTP-Anforderung wird zwischen dem Server und FB eine Zeitüberschreitung. Eine Erläuterung zum Konfigurieren der Timeout-Option des HTTP-Clients finden Sie unter github issue.

1

Gründe dafür könnten Hardwareleistung der Maschine und Netzwerkleistung sein.

Versuchen Sie es noch einmal ein paar Mal. Manchmal benötigt das Netzwerk Zeit, um Routing-Informationen zu laden, aber sobald es geladen ist, geht es die nächsten Male schneller. Das mag keine gute Produktionslösung sein, aber es könnte diagnostizieren, ob das Problem das Netzwerk-Routing auffrischt.

Dies könnte ein echtes Netzwerkleistungsproblem sein. Das kann dir nicht helfen, wenn du dein Netzwerk nicht tunen kannst.

Wenn ein erneuter Versuch hilft, können Sie den Code erneut versuchen.

(0..2).each do 
    begin 
    ... #your code goes here 
    break 
    rescue HTTPClient::ConnectTimeoutError 
    end 
end 
+0

Beachten Sie auch, dass manchmal direkt Netzausfall Zeitüberschreitungen führen. Das heißt, ein Sie können nicht von hier kommen, kann eine Auszeit geben. Stellen Sie sicher, dass Sie den Server von dem Host aus anpingen können, auf dem die Zeitüberschreitung auftritt. –

+0

die Zeitüberschreitung ist immer hier passiert ... – brauliobo

+0

Nun, @Brauliobo, der Code, den ich gab, ist keine Lösung für Timeouts, sondern eine Möglichkeit, Wiederholungen zu tun. Der OP hatte ein Problem, wenn er damit gerechnet hat, dass es funktioniert, daher habe ich vorgeschlagen, Wiederholungsversuche hinzuzufügen. Der Fall, in dem eine Zeitüberschreitung auftritt, wird nicht behandelt, da keine Verbindung hergestellt werden kann. Das wäre eine legitime Auszeit, und das Problem müsste anderswo gelöst werden. –

Verwandte Themen