来自Rails Heroku的Facebook Open Graph

我整天都在解决这个问题,可能真的需要一些投入。

我有一个在Heroku Cedar上运行的Rails应用程序(3.1.3),尝试使用gem fb_graph(2.4.0)发布一些Facebook Open Graph操作。

这是我的代码。

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控制台, heroku run console并手动键入代码,它的工作完美。

我的第一个想法是game_url(review.game)应该归咎于哪里,但在添加日志消息后,我确信它会返回正确的URL。 并且,因为当我通过heroku控制台手动运行它时整个工作正常,它确认了URL可访问并传递所请求的数据。

任何反馈或经验都非常感谢。

解决了!

真的很傻。 我的Heroku应用程序中只有一个web dyno。 由于我唯一的网络dyno正在进行Facebook API调用,因此没有响应Facebook回调的动态。 你需要至少2才能让它发挥作用。

代码在heroku控制台中工作的原因仅仅是因为web dyno没有忙于处理我的请求。

我可能会在将来将该代码推送到工作队列中,因为它似乎更合适,并让工作人员dyno处理Facebook发布。

第二个dyno的替代方案可能是试用Unicorn – 这将允许您的应用在第一个被阻止时为第二个呼叫提供服务。

这些文章提供了有关Unicorn入门的一些有用细节:

  • 使用新的Celadon Cedar堆栈在单个Heroku dyno上实现更多并发性
  • 独角兽!

以下链接似乎表明这与超时有关,尽管还没有给出实际的解决方案。 facebook“无法从URL检索数据”

您可能还想跟踪上述链接的答案。