[英]Rails - Koala / Faraday Gems Execution Expired Error
我正在使用Koala gem(v2.2)和Faraday(0.9.2)的Rails应用程序上工作。 似乎很多facebook请求都在错误地要求执行,而我不确定原因。 这是堆栈跟踪。 感谢您提供有关如何解决此问题的帮助,
这是代码段,它要么在oauth.get_app_access_token上失败,要么在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
这是错误:
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'
这是/lib/faraday/adapter/net_http.rb:82:in 'perform_request' method
中,执行已过期
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
我强调的是Ruby Documentation Net :: HTTP.request方法
返回一个HTTPResponse对象。
这是方法中的res
,它将基于Net::HTTPResponse
ruby类
另外,我将重点关注如何request
,因为我认为某些参数传递不正确,这就是响应时间太长的原因。 因此,我们应该专注于请求正文,标头和所有其他信息。
# 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
那么,如何在生产服务器日志中打印一些其他日志信息,可以在/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/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'
,在应该输出到生产日志中的某些变量上编写一些puts
语句。
您还需要确保将Rails应用程序日志配置为打印它们。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.