Ruby on rails 3 Ruby On Rails:Instagram gem,无法访问回调url

Ruby on rails 3 Ruby On Rails:Instagram gem,无法访问回调url,ruby-on-rails-3,real-time,instagram,Ruby On Rails 3,Real Time,Instagram,我在Instagram gem和realtime API中看到了一些有趣的行为,我正在尝试创建一个基本的应用程序来创建订阅和处理Instagram的响应。下面是创建订阅并将标记名保存到my db的代码 def create @subscription = Subscription.new params[:subscription] options = {:object_id => params[:subscription][:tag_name]} if @su

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

  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
请注意,回调url位于heroku,可以访问,有趣的是,当我转到heroku域的
subscriptions/new
时,Instagram API会给我一个“错误的请求,无法访问回调url”。当我使用相同的回调url在curl上创建订阅时,一切都按预期工作,当我在本地主机上转到
subscriptions/new
时(设置了相同的回调url),它也按预期工作。以下是订阅操作的流程:

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语句将处理pubsububub挑战。一旦订阅被实际创建,我在接收和处理有效负载方面没有问题。所以现在我唯一能想到的是,当我在heroku域时,Instagram发回服务器时,服务器进程不知何故很忙,我不明白这怎么可能,所以任何建议都将不胜感激


以下是订阅成功和失败时服务器日志的链接。注意,我正在注销这些日志中的post参数

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

对我有效的方法是使用另一个线程创建Instagram订阅,这样Instagram几乎可以在瞬间成功点击我的应用程序,并到达我的回调url。这个解决方案是最快速和最轻量级的,也许在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

除了这个线程方法之外,更好的解决方案是使用一个像Unicorn这样的服务器,它默认处理并发进程。