5

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 にエラーは見つかりませんでした。

私の Web サーバーは Facebook IP からの GET をログに記録し、200 OK を返します。次に、Facebook IP は画像を取得するためにさらにいくつかのリクエストを行い、これも 200 OK を取得します。

参考までに、アプリのテスト ユーザーでこれをテストしています。

アップデート

これは OpenGraph の問題のようです。この問題は私のために再現します: https://developers.facebook.com/bugs/213733412077729

基本的に、POST は、デバッガーで 1 回テストした後にのみ成功します。誰もこれを以前に経験しましたか?

4

2 に答える 2

12

理解した。もちろん、デバッガーのことは意味がありません。Facebook がキャッシュに私のビューを持っているため、うまくいきました。

これは古典的な再入可能性の問題です (Rails で対処しなければならないなんて信じられません!) -- Facebook の POST API は同期的であり、ショー コントローラーにコールバックした後にのみ戻ります。しかし、ワーカー スレッドが 1 つしかないため、リクエストにサービスを提供する人がいないため、ハングします。

修正は、API をスレッドで非同期的に呼び出すことです。

Thread.new {
    @fbgraph.put_connections("me", "myapp:view", :room => url_for(@room))
}
于 2012-06-13T09:03:19.737 に答える
1

私はあなたと同様の問題を抱えていますが、FBへの600を超える呼び出しを管理するgetリクエストがあります(合計時間> 16秒)。

フィールドが機能しているように明示的に宣言します。

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

詳細については、stackoverflow の Q/A を参照してください

于 2012-12-05T22:24:52.700 に答える