2012-06-13 3 views
5

私はRails 3.2.5とCoreala 1.3.0を使用しています(最近はHerokuのサンプルFacebookアプリを実行することも拒否されています)。 WebサーバーはUnicornです。非常に長い遅延の後にKoalaのFacebookグラフへのput_connections()が失敗します

私はput_connections()を使用して、タイムラインに投稿してみてください:例外を取得する前12S用のコントローラの屋台が

@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" 

を:

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も取得します。

私のアプリのテストユーザーFYIでこれをテストしています。

UPDATE

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

基本的にPOSTは、デバッガで一度だけテストした後に成功します。誰もこれを前に経験しましたか?

答えて

12

もちろん、デバッガのことは意味をなさない。それはFacebookが自分のキャッシュを見ているので機能しました。

これは古典的なリエントラント問題です(私はRailsで対処しなければならないとは思えません!) - FacebookのPOST APIは同期式で、ショーコントローラーにコールバックした後にのみ戻ります。しかし、私は1つのワーカースレッドしか持っていないので、要求を処理している人がいないので、ハングします。

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

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

おかげで私のQ/Aを参照してください、これは私があまりにも私の問題を修正するために必要な手がかりを与えました。私は根本的な原因は、あなたのコントローラ内の同期外部サービスコールを行うことが '悪い'ことだと思う。 '技術的により正確な'アーキテクチャは、あなたの行動が何らかのバックグラウンドジョブ(遅延ジョブ、再作成など)を提出し、コントローラをブロックしないようにすることです。 –

1

私はあなたのように、しかし(合計時間> 16Sで)FBに600回の以上の通話を管理get要求と同様の問題を抱えています。

フィールドが明示的に宣言されているようです。詳細情報については

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

はstackoverflowのHERE

関連する問題