我一直在使用 Instagram gem 和实时 API 看到一些有趣的行为,我正在尝试创建一个基本的应用程序来创建订阅和处理 Instagram 的响应。下面是创建订阅并将标签名称保存到我的数据库的代码。
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,有趣的是,当我访问subscriptions/new
heroku 域时,Instagram API 给了我一个“错误请求,无法访问回调 URL”。当我使用相同的回调 url 通过 curl 创建订阅时,一切都按预期工作,当我转到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 语句将处理 pubsubhub 挑战。实际创建订阅后,接收和处理有效负载就没有问题了。所以现在我唯一能想到的是,当我在 heroku 域时,服务器进程在 Instagram 发回给它时有点忙,我不明白这怎么可能,所以任何建议都将不胜感激。
这是订阅成功和失败时服务器日志的链接。请注意,我正在注销这些日志中的帖子参数。https://gist.github.com/4256108。