【问题标题】:put_connections() to Facebook graph in Koala fails after a very long delay很长一段时间后,Koala 中的 put_connections() 到 Facebook 图表失败
【发布时间】:2012-06-15 23:34:09
【问题描述】:

我正在使用 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 IP 的 GET 并返回 200 OK。然后 Facebook IP 发出更多请求以获取图像,这也获得了 200 OK。

我正在对我的应用的测试用户进行测试,仅供参考。

更新

这似乎是一个 OpenGraph 问题。这个问题为我重现:https://developers.facebook.com/bugs/213733412077729

基本上,只有在我在调试器上测试一次之后,POST 才能成功!有没有人经历过这种情况?

【问题讨论】:

    标签: ruby-on-rails facebook facebook-graph-api koala


    【解决方案1】:

    想通了。当然,调试器的事情没有意义。它之所以奏效,是因为 Facebook 拥有我对他们缓存的看法。

    这是一个经典的重入问题(我不敢相信我必须在 Rails 中处理这个问题!)——Facebook 的 POST API 是同步的,它只在回调我的显示控制器后才返回。但由于我只有 1 个工作线程,因此没有人为请求提供服务,因此挂起。

    解决方法是在线程中异步调用 API。

    Thread.new {
        @fbgraph.put_connections("me", "myapp:view", :room => url_for(@room))
    }
    

    【讨论】:

    • 谢谢,这也给了我解决问题所需的线索。我认为根本原因是在控制器中进行同步外部服务调用是“不好的”。 “技术上更正确”的架构是让您的操作提交某种后台作业(延迟作业、resque 等),而不是阻止您的控制器。
    【解决方案2】:

    我有一个和你类似的问题,但是有一个管理超过 600 次 FB 调用的 get 请求(总时间 > 16 秒)。

    明确声明字段似乎有效。

    graph = @FBGraph.get_object("#{user.fb_user_id}?fields=id,name,username,picture,link")
    

    有关更多信息,请参阅我在 stackoverflow 中的 Q/A HERE

    【讨论】:

      猜你喜欢
      • 2014-01-27
      • 1970-01-01
      • 2013-08-07
      • 2020-10-02
      • 2020-08-11
      • 2022-08-23
      • 1970-01-01
      • 2019-12-02
      • 2023-03-07
      相关资源
      最近更新 更多