2012-01-13 3 views
0

私のレールアプリとFacebookのオープングラフベータには本当に奇妙な問題があります。オブジェクトにアクションを投稿するたびに、FacebookはオブジェクトのURLに到達できない、またはogスクレイパーがURLを正しくスクラップしていないことを示すエラーを返します。Facebookに投稿するHTTPartyを使用したOGは、レールコンソールでのみ動作しますか?

しかし、アプリがFacebookへの投稿用に生成しているURLを使って、手動でHTTParty gemを使用して投稿すると、それは動作します。

はここに私のコードです:オブジェクトはそれのコントローラーのshowメソッドを介して読み出された場合

class Post < ActiveRecord::Base 
    FB_CONFIG = YAML.load_file("#{Rails.root}/config/initializers/facebook.yml")[Rails.env] 

    def self.to_facebook_og(obj, obj_id, verb, auth, extra) 
    #requires that a user has granted `publish_actions` 
    found_obj = obj.classify.constantize.find(obj_id) #find the actual object we're talking about 
    post_url = self.construct_facebook_action_url(obj, found_obj, verb, auth, extra) #create the URL 
    begin 
     ret = HTTParty.post(post_url) 
     logger.info "Facebook Post Action Response = #{ret}" 
    rescue HTTParty::ResponseError => e #handle any errors 
     logger.error {"FACEBOOK Response #{ret.code}/#{e.inspect}"} 
     flash.alert {"There was a Facebook problem. Please try again."} 
     return 
    end 
    end 

    def self.construct_facebook_action_url(obj, found_obj, verb, auth, extra) 
    base = 'https://graph.facebook.com/' 
    uid = auth.uid 
    namespace = FB_CONFIG['namespace'] 
    token = "?access_token=#{auth.token}" 
    og_url = "#{obj}=http://theshortestfiction.com/#{obj.pluralize}/#{found_obj.id}" 
    fb_url = base + uid + '/' + namespace + ':' + verb + token + '&' + og_url + extra 
    logger.info fb_url 
    fb_url 
    end 

    def self.lint_og_object(obj_url) 
    lint_ret = HTTParty.post("https://developers.facebook.com/tools/lint/?url=#{obj_url}&format=json") 
    logger.info "Facebook Linter Response = #{lint_ret}" 
    end 



end 

、アプリがPost.to_facebookを呼び出します。私のログからは、Post.construct_facebook_action_urlが適切なURLを構築していることがわかります(私が言ったように、ログからURLを取り出してコンソールから手動で投稿できます)。だから、私はHTTPartyにURLを渡す方法に問題があると仮定していますか? FacebookはどんなオブジェクトのURLそれをで見てくださいする必要がありますを伝えることができるようだ。なぜ私が書いたコードは動作しませんが、コンソールでは手動で動作しますか?

さらに悪いことに、オブジェクトに一度成功したポストアクションがあると、コードは一貫して動作するように見えます。 Facebook と主張しているのは、オブジェクトのURLに到達できないという問題ですが、私はそれらを閲覧することができないので、どのようにそうでないのか理解できません。

答えて

0

これは実際にはタイムアウトの問題だと思います。

HTTPartyを使用して、URLに到達できないというエラーはあなたとまったく同じでした。

Resqueを使用してコードをバックグラウンドプロセスに移動し、問題を修正しました。

+0

私は実際にはスケジュールされたプロセスに移動し、動作しているようです。 – Slick23

関連する問題