2017-09-19 4 views
0

Ich arbeite an einer Schiene Anwendung, die Koala Gem (v2.2) und Faraday (0.9.2) verwendet. Es sieht so aus, als würden viele der Facebook-Anfragen mit der Ausführung fehlschlagen und ich bin mir nicht sicher warum. Hier ist eine Stapelverfolgung. Ich wäre dankbar, auf Hilfe, wie dieses Problem zu beheben,Schienen - Koala/Faraday Gems Ausführung abgelaufen Fehler

Hier ist der Code-Schnipsel, entweder es nicht auf oauth.get_app_access_token oder app_graph.debug_token

oauth = Koala::Facebook::OAuth.new(Rails.application.config.facebook_app_id, 
            Rails.application.config.facebook_app_secret, 
            nil) 

app_access_token = oauth.get_app_access_token # fails here 
app_graph = Koala::Facebook::API.new(app_access_token) 
token_info = app_graph.debug_token(atoken) # or fails here 

Hier ist der Fehler:

ERROR: execution expired 
/usr/lib/ruby/1.9.2/net/http.rb:644:in `initialize' 
/usr/lib/ruby/1.9.2/net/http.rb:644:in `open' 
/usr/lib/ruby/1.9.2/net/http.rb:644:in `block in connect' 
/usr/lib/ruby/1.9.2/net/http.rb:644:in `connect' 
/usr/lib/ruby/1.9.2/net/http.rb:637:in `do_start' 
/usr/lib/ruby/1.9.2/net/http.rb:626:in `start' 
/usr/lib/ruby/1.9.2/net/http.rb:1168:in `request' 
/usr/lib/ruby/gems/1.9.2/gems/faraday-0.9.2/lib/faraday/adapter/net_http.rb:82:in `perform_request' 
/usr/lib/ruby/gems/1.9.2/gems/faraday-0.9.2/lib/faraday/adapter/net_http.rb:40:in `block in call' 
/usr/lib/ruby/gems/1.9.2/gems/faraday-0.9.2/lib/faraday/adapter/net_http.rb:87:in `with_net_http_connection' 
/usr/lib/ruby/gems/1.9.2/gems/faraday-0.9.2/lib/faraday/adapter/net_http.rb:32:in `call' 
/usr/lib/ruby/gems/1.9.2/gems/faraday-0.9.2/lib/faraday/request/url_encoded.rb:15:in `call' 
/usr/lib/ruby/gems/1.9.2/gems/faraday-0.9.2/lib/faraday/request/multipart.rb:14:in `call' 
/usr/lib/ruby/gems/1.9.2/gems/faraday-0.9.2/lib/faraday/rack_builder.rb:139:in `build_response' 
/usr/lib/ruby/gems/1.9.2/gems/faraday-0.9.2/lib/faraday/connection.rb:377:in `run_request' 
/usr/lib/ruby/gems/1.9.2/gems/faraday-0.9.2/lib/faraday/connection.rb:177:in `post' 
/usr/lib/ruby/gems/1.9.2/gems/koala-2.2.0/lib/koala/http_service.rb:113:in `make_request' 
/usr/lib/ruby/gems/1.9.2/gems/koala-2.2.0/lib/koala.rb:64:in `make_request' 
/usr/lib/ruby/gems/1.9.2/gems/koala-2.2.0/lib/koala/oauth.rb:306:in `fetch_token_string' 
/usr/lib/ruby/gems/1.9.2/gems/koala-2.2.0/lib/koala/oauth.rb:258:in `get_token_from_server' 
/usr/lib/ruby/gems/1.9.2/gems/koala-2.2.0/lib/koala/oauth.rb:189:in `get_app_access_token_info' 
/usr/lib/ruby/gems/1.9.2/gems/koala-2.2.0/lib/koala/oauth.rb:199:in `get_app_access_token' 
+0

Ihr HTTP-Anruf wird zeitgesteuert ausgeführt ... Die Website, auf die Sie zugreifen, dauert mehr als 5 Sekunden, um zu antworten. Wonach versuchst du zu http? – SteveTurczyn

+0

Ich versuche, ein Access Token von Facebook mit oauth zu erhalten: oauth = Koala :: Facebook :: OAuth.new (Rails.application.config.facebook_app_id, Rails.application.config.facebook_app_secret, Null) – Heisenberg

+0

Ich bearbeitet die Code, um das Code-Snippet, Timeout entweder Zugriffstoken oder Debug-Token zu bekommen, scheint am 13. September gestartet 4pm PDT, auch Problem mit facebook geloggt aber wundern, wenn es auch Probleme mit Edelsteinen gibt – Heisenberg

Antwort

1

Dies ist /lib/faraday/adapter/net_http.rb:82:in 'perform_request' method wo die Ausführung abgelaufen ist

def perform_request(http, env) 
    if :get == env[:method] and !env[:body] 
     # prefer `get` to `request` because the former handles gzip (ruby 1.9) 
     http.get env[:url].request_uri, env[:request_headers] 
    else 
     # In your case you execture http.request 
     http.request create_request(env) 
    end 
    end 

Dies ist die Ruby-Dokumentation Net::HTTP.request Methode, ich unterstreichen

Returns an HTTPResponse object.

welche die res in dem Verfahren und wird auf der Net::HTTPResponse ruby class

Auch basieren würde ich darauf konzentrieren, wie die request gemacht, weil ich glaube, Einige Parameter werden falsch übergeben und dies ist der Grund, warum die Antwort so lange dauert. Wir sollten uns also auf den Anfragetext, den Header und alle anderen Informationen konzentrieren.

# File net/http.rb, line 1421 
def request(req, body = nil, &block) # :yield: +response+ 
    unless started? 
    start { 
     req['connection'] ||= 'close' 
     return request(req, body, &block) 
    } 
    end 
    if proxy_user() 
    req.proxy_basic_auth proxy_user(), proxy_pass() unless use_ssl? 
    end 
    req.set_body_internal body 
    res = transport_request(req, &block) 
    if sspi_auth?(res) 
    sspi_auth(req) 
    res = transport_request(req, &block) 
    end 
    res 
end 

Also, was über das Drucken einiger zusätzliche Protokollinformationen in dem Produktionsserver Protokoll können Sie öffnen diese Dateien /usr/lib/ruby/1.9.2/net/http.rb:1168:in 'request' und /usr/lib/ruby/gems/1.9.2/gems/faraday-0.9.2/lib/faraday/adapter/net_http.rb:82:in 'perform_request', einige puts Aussagen auf einigen Variablen zu schreiben, das ausgeben sollte in Ihrem Produktionsprotokoll.

Sie müssen auch sicherstellen, dass das App-Protokoll der Rails zum Drucken konfiguriert ist.

Verwandte Themen