我使用的是Rails 3.2.5和Koala 1.3.0 (不是最新版本,因为它甚至拒绝运行Heroku的Facebook应用程序示例)。Web服务器是Unicorn。
当我试图使用put_connections()发布到时间线时:
@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有任何错误。
我的web服务器记录了来自Facebook的GET,并返回200 OK。然后,Facebook会发出更多的请求来获取图像,这也会得到200 OK。
我正在测试我的应用程序的测试用户FYI。
更新
这似乎是一个OpenGraph问题。这个问题重现给我:https://developers.facebook.com/bugs/213733412077729
基本上,只有在我在调试器上测试它一次之后,这个帖子才是成功的!以前有人经历过吗?
发布于 2012-06-13 09:03:19
弄明白了。当然调试器的事情没有意义。它之所以奏效,是因为Facebook当时对他们的缓存有我的看法。
这是一个典型的重入问题(我不敢相信我必须在Rails中处理这个问题!) -- Facebook的POST API是同步的,只有在它调用回我的显示控制器之后才会返回。但是,由于我只有一个工作线程,所以没有人为请求提供服务,因此需要挂起。
修复方法是在线程中异步调用API。
Thread.new {
@fbgraph.put_connections("me", "myapp:view", :room => url_for(@room))
}
发布于 2012-12-05 22:24:52
我和您有类似的问题,但是get请求管理超过600个对FB的调用(总时间> 16s)。
显式声明字段似乎有效。
graph = @FBGraph.get_object("#{user.fb_user_id}?fields=id,name,username,picture,link")
有关更多信息,请参见堆栈溢出HERE中的Q/A
https://stackoverflow.com/questions/11007616
复制相似问题