Ruby on rails Heroku上托管站点的Twitter费率限制

Ruby on rails Heroku上托管站点的Twitter费率限制,ruby-on-rails,ruby-on-rails-3,twitter,heroku,memcached,Ruby On Rails,Ruby On Rails 3,Twitter,Heroku,Memcached,我有一个使用自定义域托管在Heroku上的rails应用程序。该应用程序在每个页面的顶部显示单个用户发出的最新推文。为了避免达到Twitter的速率限制,我让应用程序将搜索结果缓存在memcache Dalli中,过期时间为5分钟。这很好地工作,确保应用程序每小时仅发出12个请求。如果它是高度贩运,这个解决方案可能是有问题的,但我认为它是好的 尽管我的速率远低于限制,但我的站点会定期宕机并查看我的服务器日志,这是因为我已经超过了Twitter的速率限制 这和希罗库有关吗?还有什么原因可能导致它?

我有一个使用自定义域托管在Heroku上的rails应用程序。该应用程序在每个页面的顶部显示单个用户发出的最新推文。为了避免达到Twitter的速率限制,我让应用程序将搜索结果缓存在memcache Dalli中,过期时间为5分钟。这很好地工作,确保应用程序每小时仅发出12个请求。如果它是高度贩运,这个解决方案可能是有问题的,但我认为它是好的

尽管我的速率远低于限制,但我的站点会定期宕机并查看我的服务器日志,这是因为我已经超过了Twitter的速率限制

这和希罗库有关吗?还有什么原因可能导致它?这与共享IP地址有关吗

日志:


很简单。如果您与多个其他开发人员共享一个IP,那么您也将共享速率限制

我建议使用身份验证将请求数提高到每小时350个,取消基于IP的限制。这将简单地为您提供350个请求,而不考虑与您共享IP的开发人员


很简单。如果您与多个其他开发人员共享一个IP,那么您也将共享速率限制

我建议使用身份验证将请求数提高到每小时350个,取消基于IP的限制。这将简单地为您提供350个请求,而不考虑与您共享IP的开发人员


您是否考虑过使用Apigee附加组件


这会增加您的费率限制,以及其他一些提示。

您是否考虑过使用Apigee附加组件



这会增加您的费率限制,以及其他一些提示。

使用自定义域或其他东西。heroku.com?也许限制是基于*.heroku.com?请发布日志的相关部分。目前,我们没有什么可以做的。我怀疑是希罗库,虽然我认为这是可能的,但我们需要更多的信息来说明它可能是什么。另外,您是否检查过您的Twitter开发设置以确保它不处于某种演示模式?你是否也绝对确定你一小时只打12次推特,也许每5分钟就有多个请求,而你没有意识到这一点?@normalocity-sure。添加了日志的一部分。在获取您的速率限制状态的Tweet未计入您的API请求之前,我正在将速率限制写在屏幕上,我可以看到它的下降速度没有超出预期。@typeoneerror使用自定义域使用自定义域或其他什么。heroku.com?也许限制是基于*.heroku.com?请发布日志的相关部分。目前,我们没有什么可以做的。我怀疑是希罗库,虽然我认为这是可能的,但我们需要更多的信息来说明它可能是什么。另外,您是否检查过您的Twitter开发设置以确保它不处于某种演示模式?你是否也绝对确定你一小时只打12次推特,也许每5分钟就有多个请求,而你没有意识到这一点?@normalocity-sure。添加了日志的一部分。在获取您的速率限制状态的Tweet未计入您的API请求之前,我正在将速率限制写入屏幕,并且我可以看到它的下降速度没有比预期的快。@typeoneerror使用自定义域标记。如果是这样的话,那么即使提高限额也不是万无一失的。所有这一切将需要3个其他应用程序接近同一IP的限制。我觉得这很疯狂。因此,在Heroku上托管的任何点击Twitter API的网站都会面临这种风险?我不确定你是否与所有Heroku共享IP,只是与boxFwiw上的其他Dyno共享IP,如果你进行身份验证,你只需摆脱基于IP的限制。当你对API进行身份验证时,基于IP的限制不适用。如果您将OAuth令牌与请求一起发送,那么其他应用程序是否从您的源IP发出请求并不重要,因为它只根据您的限制计算使用您的凭据发出的请求,假设其他应用程序没有发出不适当的请求数目的请求,从而导致IP被列入黑名单。@Dan谢谢。是的,现在一切都讲得通了。谢谢。如果是这样的话,那么即使提高限额也不是万无一失的。所有这一切将需要3个其他应用程序接近同一IP的限制。我觉得这很疯狂。因此,在Heroku上托管的任何点击Twitter API的网站都会面临这种风险?我不确定你是否与所有Heroku共享IP,只是与boxFwiw上的其他Dyno共享IP,如果你进行身份验证,你只需摆脱基于IP的限制。当你对API进行身份验证时,基于IP的限制不适用。如果您将OAuth令牌与请求一起发送,那么其他应用程序是否从您的源IP发出请求并不重要,因为它只根据您的限制计算使用您的凭据发出的请求,假设其他应用程序没有发出不适当的请求数目的请求,从而导致IP被列入黑名单。@Dan谢谢。是的,现在一切都讲得通了。谢谢。N
哦,我没看见。看起来Oauth与Apigee的组合应该可以做到这一点。@Neil找不到“Apigee”的匹配项这是heroku上显示的apegee addonApigee不再作为AddOnAnks提供的消息。不,我没看见。看起来Oauth与Apigee的组合应该可以做到这一点。@Neil找不到“Apigee”的匹配项这是heroku上显示的apegee插件不再作为插件提供的消息
2012-02-20T22:09:52+00:00 app[web.1]: Rendered pages/home.html.erb within layouts/application (0.8ms)
2012-02-20T22:09:52+00:00 app[web.1]: Rendered layouts/_header.html.erb (336.2ms)
2012-02-20T22:09:52+00:00 app[web.1]: Completed 500 Internal Server Error in 339ms
2012-02-20T22:09:52+00:00 app[web.1]: ActionView::Template::Error (Rate limit exceeded. Clients may not make more than 150 requests per hour.):
2012-02-20T22:09:52+00:00 app[web.1]:     5:             <p class="latest-tweet">
2012-02-20T22:09:52+00:00 app[web.1]: 
2012-02-20T22:09:52+00:00 app[web.1]:     7:                 <% if !latest_tweet%>
2012-02-20T22:09:52+00:00 app[web.1]:     8:                     <% latest_tweet = Twitter.user_timeline("sometwitterusername").first.text %>
2012-02-20T22:09:52+00:00 app[web.1]:     6:                 <% latest_tweet = Rails.cache.read "latest_tweet" %>
2012-02-20T22:09:52+00:00 app[web.1]:     9:                     <% Rails.cache.write("latest_tweet", latest_tweet, :expires_in => 5.minutes) %>
2012-02-20T22:09:52+00:00 app[web.1]:     10:                 <% end %>
2012-02-20T22:09:52+00:00 app[web.1]:     11:                 <%= latest_tweet %>
2012-02-20T22:09:52+00:00 app[web.1]:   app/views/layouts/_header.html.erb:8:in `_app_views_layouts__header_html_erb___4472938277532005844_37037700'
2012-02-20T22:09:52+00:00 app[web.1]:   app/views/layouts/application.html.erb:14:in `_app_views_layouts_application_html_erb__4101970984987800094_41561940'