在Heroku上托管的网站的Twitter速率限制

Und*_*ion 1 twitter memcached ruby-on-rails heroku ruby-on-rails-3

我有一个使用自定义域在Heroku上托管的rails应用程序.应用程序在每个页面的顶部显示单个用户的最新推文.为了避免达到Twitter速率限制(150个请求p/h),我让应用程序在5分钟到期时将搜索结果缓存在memcache(Dalli)中.这很好用,确保应用程序每小时只发出12个请求.如果它被高度贩运,这个解决方案可能会有问题,但我觉得它很好.

尽管我远远低于速率限制,但我的网站会定期关闭并查看我的服务器日志,因为我已超出Twitter的速率限制.

这与Heroku有关吗?还有什么可能导致它?它与共享IP地址有关吗?

日志:

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'
Run Code Online (Sandbox Code Playgroud)

Tom*_*rdt 6

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

我建议使用身份验证将此值提高到每小时350个请求,从而删除基于IP的限制.无论您与谁共享IP,开发人员都会给 350个请求.

https://dev.twitter.com/docs/rate-limiting