Ruby On Rails:Instagram的宝石,无法达到回调网址

时间:2012-12-11 05:29:00

标签: ruby-on-rails-3 real-time instagram

我一直看到Instagram gem和realtime API的一些有趣的行为,我正在尝试创建一个基本的应用程序来创建订阅和处理Instagrams的响应。下面是创建订阅并将标记名称保存到我的数据库的代码。

  def create
    @subscription = Subscription.new params[:subscription]
    options = {:object_id => params[:subscription][:tag_name]}

    if @subscription.save
      Instagram.create_subscription('tag', "http://myapp.herokuapp.com/subscriptions/process_subscription/", aspect = 'media', options)
      redirect_to "/subscriptions/tag/#{@subscription.tag_name}"
  end

请注意,回调网址位于heroku,可以访问,有趣的是,当我转到heroku域的subscriptions/new时,Instagram API会给我一个“错误请求,无法访问回调网址”。当我使用相同的回调url创建curl订阅时,一切都按预期工作,当我转到我的localhost上的subscriptions/new(具有相同的回调URL设置)时,它也按预期工作。以下是process_subscription操作:

def process_subscription
  if params["hub.challenge"]
    render :text => params["hub.challenge"]
  else      
    PrivatePub.publish_to("/subscriptions/tag/#{params[:object_id]}", payload: params[:_json])
  end
end

第一个if语句将处理pubsubhubub挑战。实际创建订阅后,接收和处理有效负载时没有问题。所以现在我唯一可以想到的是当我在heroku域时服务器进程在Instagram回帖时很忙,我不明白这是怎么回事,所以任何建议都会非常感激。

订阅成功及失败时,这是指向服务器日志的链接。注意,我在这些日志中注销了post params。 https://gist.github.com/4256108

1 个答案:

答案 0 :(得分:5)

经过多次试验和错误后,当Instagram将'hub.challenge'发送回应用程序导致“错误请求,无法访问回调URL”错误时,问题看起来越来越像rails过程繁忙。< / p>

对我来说有用的是使用另一个线程来创建Instagram订阅,这样Instagram几乎可以成功地立即点击我的应用并到达我的回调网址。这个解决方案是最快速,最轻量级的,也许在Heroku上购买一个左右的工作人员并通过Sidekiq将其转移到后台进程或其他东西是有益的,但这似乎有点矫枉过正,仅仅响应了一个集线器挑战。

  def instagram_photos
    Thread.new do |t|
      options = {:object_id => params[:tag_name]}
      Instagram.create_subscription('tag', "http://myapp.herokuapp.com/subscriptions/process_subscription", aspect = 'media', options)
      t.exit
    end
    redirect_to root_path
  end