edw*_*nbs 5 facebook ruby-on-rails facebook-graph-api koala
我正在使用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"
Run Code Online (Sandbox Code Playgroud)
在获得异常之前,控制器会停顿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}}):
Run Code Online (Sandbox Code Playgroud)
我使用调试工具进行了测试:http://developers.facebook.com/tools/debug ,它发现第2行中记录的URL没有错误.
我的Web服务器从Facebook IP记录GET并返回200 OK.然后,Facebook IP会提出更多请求以获取图像,这也是200 OK.
我正在我的应用程序的测试用户FYI上测试这个.
UPDATE
这似乎是一个OpenGraph问题.这个问题为我重现:https://developers.facebook.com/bugs/213733412077729
基本上只有在我在调试器上测试一次后,POST才会成功!以前有人经历过吗?
edw*_*nbs 12
弄清楚了.当然调试器的东西没有意义.它起作用,因为Facebook然后我的观点在他们的缓存.
这是一个经典的重入问题(我无法相信我必须在Rails中处理它!) - Facebook的POST API是同步的,只有在它回调给我的show controller后它才会返回.但由于我只有1个工作线程,因此没有人为请求提供服务,因此挂起.
修复是在线程中异步调用API.
Thread.new {
@fbgraph.put_connections("me", "myapp:view", :room => url_for(@room))
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
2383 次 |
| 最近记录: |