Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/ruby-on-rails/54.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ruby on rails 来自Rails Heroku的Facebook开放图_Ruby On Rails_Ruby_Facebook Graph Api_Heroku - Fatal编程技术网

Ruby on rails 来自Rails Heroku的Facebook开放图

Ruby on rails 来自Rails Heroku的Facebook开放图,ruby-on-rails,ruby,facebook-graph-api,heroku,Ruby On Rails,Ruby,Facebook Graph Api,Heroku,我整天都在解决这个问题,可能真的需要一些意见 我在Heroku Cedar上运行了一个Rails应用程序(3.1.3),试图用gem fb_Graph(2.4.0)发布一些Facebook开放图操作 这是我的密码 begin app = FbGraph::Application.new(ENV['facebook_app_id']) me = FbGraph::User.me(user.facebook_access_token) logger.info "Facebo

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

我在Heroku Cedar上运行了一个Rails应用程序(3.1.3),试图用gem fb_Graph(2.4.0)发布一些Facebook开放图操作

这是我的密码

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运行控制台
,然后手动输入代码,它就可以完美地工作

我的第一个想法是
game\uURL(review.game)
哪里该怪,但是在添加日志消息之后,我确信它返回了正确的url。而且,当我通过heroku控制台手动运行它时,整个过程都能正常工作,因此它确认URL是可访问的,并传递所请求的数据


非常感谢您对此的任何反馈或经验。

下面的链接似乎表明这与超时有关,尽管尚未给出实际的解决方案

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

解决了它

实际上真的很愚蠢。我的Heroku应用程序中只有一个web dyno。因为我唯一的网络dyno是在做Facebook的API调用,所以没有dyno来响应Facebook的回调。你至少需要2个才能让它工作

代码在heroku控制台中工作的原因很简单,因为web dyno没有忙于处理我的请求


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

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

这些文章提供了一些关于开始使用Unicorn的有用细节:


您是否尝试过更改ENV['facebook\u app\u id',并在此处添加id?我以前在Facebook和环境变量方面遇到过问题,值得一试,但遗憾的是没有效果。我还尝试添加了这个秘密,即使它不需要。将fb_图升级到2.4.7版没有效果。谢谢你的链接。很高兴看到我并不孤单。我不确定超时的事。渲染游戏url页面大约需要400毫秒。这不应该是超时,对吗?值得调查。谢谢。请注意,即使有两个dyno,如果路由器将请求发送到错误的dyno,您仍然可以阻止。我在另一个答案中建议使用独角兽;另一种选择是使用第二个应用程序来实现回调,尽管我不确定fb_graph gem是否能够做到这一点。@metadaddy,Heroku说不止一个dyno提供了更多的并发性。如果我有两个dyno,为什么路由到同一个dyno?什么路由器发送到错误的dyno?@Tony,路由层会在你的dyno上分发请求。假设您有2个dynos,dyno1正在处理上述请求。第二个请求到达(来自某些用户的浏览器,而不是来自FB),并被路由到dyno 2。现在,请求从FB到达,很可能被路由到dyno 1,从而导致死锁。添加一个dyno可以进行测试,但这不是一个可靠的长期解决方案。@metadaddy,即使有5个dyno,facebook回调也会发送到与原始请求相同的dyno。你知道为什么吗?@Tony,很有趣-我经常在Rails应用程序上设置多个dynos,然后从浏览器中刷新页面几次,然后查看跨dynos分发的请求。不知道你为什么会看到这种行为。你应该问一下