我正在使用Rails 3.2.5和Koala 1.3.0(不是最新的,因为最新的拒绝运行来自Heroku的样本Facebook应用程序)。 Web服务器是Unicorn。
当我尝试使用put_connections()POST到时间轴时:
@fbgraph = Koala::Facebook::API.new(session[:access_token])
logger.debug "put_connections(#{url_for @room}), start"
@fbgraph.put_connections("me", "myapp:view", :room => url_for(@room))
logger.debug "put_connections(), end"
控制器在获得异常之前会停顿12秒:
Completed 500 Internal Server Error in 12075ms
Koala::Facebook::APIError (HTTP 500: Response body: {"error":{"type":"Exception","message":"Could not retrieve data from URL.","code":1660002}}):
我使用调试工具进行了测试:http://developers.facebook.com/tools/debug 并且它发现第2行中记录的URL没有错误。
我的网络服务器从Facebook IP记录GET并返回200 OK。 Facebook IP随后会提出更多请求以获取图像,这也可以获得200 OK。
我正在我应用的测试用户FYI上测试这个。
更新
这似乎是一个OpenGraph问题。此问题为我重现:https://developers.facebook.com/bugs/213733412077729
基本上只有在我在调试器上测试一次POST后才能成功!以前有人经历过这个吗?
答案 0 :(得分:12)
想出来。当然调试器的东西没有意义。它之所以有效,是因为Facebook随后对缓存进行了观察。
这是一个经典的重入问题(我无法相信我必须在Rails中处理它!) - Facebook的POST API是同步的,只有在它回调到我的节目控制器后它才会返回。但由于我只有1个工作线程,因此没有人为请求提供服务,因此挂起。
修复是在线程中异步调用API。
Thread.new {
@fbgraph.put_connections("me", "myapp:view", :room => url_for(@room))
}
答案 1 :(得分:1)
我遇到了类似的问题,但是有一个get请求可以管理超过600次调用FB(总时间> 16秒)。
明确声明字段似乎有效。
graph = @FBGraph.get_object("#{user.fb_user_id}?fields=id,name,username,picture,link")
有关详细信息,请参阅stackoverflow HERE
中的问答