2012-03-27 2 views
6

私はこの問題を一日中戦ってきました。Rails HerokuからFacebookを開く

私は、Goku fb_graph(2.4.0)でいくつかのFacebook Open Graphアクションを公開しようとする、Rokuアプリケーション(3.1.3)をHeroku Cedarで実行しています。

これは私のコードです。私はこのコードを実行しようとする自分のアプリケーション内のページに行けば

begin 
    app = FbGraph::Application.new(ENV['facebook_app_id']) 
    me = FbGraph::User.me(user.facebook_access_token) 

    logger.info "Facebook: User #{user.name} reviewing game #{game_url(review.game)}" 

    action = me.og_action!(
     app.og_action(:review), 
     :game => game_url(review.game), 
     :content => review.review, 
     :rating => review.rating 
    ) 
rescue Exception => exc 
    logger.error "Failed to publish review #{review.id} to facebook #{user.facebook_auth}" 
    logger.error "Facebook error msg: #{exc.message}" 
end 

、それは次のようなメッセージで失敗します。コード内

FbGraph::InvalidRequest (Exception :: Could not retrieve data from URL.) 

しかし、私はHerokuのコンソールを開くには、WHERE場合、heroku run consoleとタイプ手では、それが完璧に動作します。

最初の考えはgame_url(review.game)でしたが、ログメッセージを追加した後、正しいURLを返すと確信しています。また、私はherokuコンソールを使って手動で実行すると、そのURLがアクセス可能であることを確認し、要求されたデータを配信することがすべて機能します。

これに関するフィードバックやご経験があれば幸いです。

+0

あなたはENV [ 'facebook_app_id']を変更すると、すぐそこにIDを含めて試してみました:

これらの記事は、ユニコーンの使用を開始する上でいくつかの有用な詳細を与えますか?以前はFacebookや環境変数に問題がありました。 – Ashitaka

+0

試してみる価値はありましたが、残念ながら効果はありませんでした。私はまた、必要ではないはずの秘密を追加しようとしました。 –

+0

fb_graphをバージョン2.4.7にアップグレードしました。 –

答えて

11

解決済み!

実際には本当に愚かです。私はHerokuのアプリケーションでWeb dynoを1つだけ持っていました。私の唯一のWeb dynoはFacebook APIコールを行っていたので、Facebookのコールバックに応答するdynoはありませんでした。これを動作させるには少なくとも2つ必要です。

herokuコンソールでコードが動作した理由は、ウェブのdynoが私の要求を処理するのに忙しいからではありませんでした。

将来的には作業用キューにコードをプッシュして、より適切なようにしてワーカーのダイノーがFacebookの発行を処理できるようにします。

+0

あなたの答えを受け入れることを忘れないでください! – Ashitaka

+1

2台のdynosを使用していても、ルータが間違ったdynoに要求を送信すると、ブロックすることができます。私は別の答えでUnicornを提案しました。もう1つの選択肢は、コールバックを実装するために2番目のアプリを使用することですが、fb_graphの宝石にはそれに従うかどうかはわかりません。 – metadaddy

+0

@metadaddy、Herokuによると、複数のdynoでより多くの並行性が提供されています。 2つのdynosを持っている場合、なぜ同じdynoにルーティングされますか? ルータが間違ったdynoに送信するものはありますか? – Tony

0

実際の解決策はまだありませんが、これはタイムアウトに関連しているようです。 facebook "could not retrieve data from URL"

また、上記のリンクの回答を追跡したい場合もあります。

+0

リンクありがとうございます。私は一人ではありません。タイムアウトのことについてはわかりません。 game_urlページをレンダリングするのに約400msかかる。時間切れの権利はないでしょうか?調査に値するありがとう。 –

関連する問題