我有一個使用自定義域名託管在Heroku上的Rails應用程序。該應用程序顯示每個頁面頂部的單個用戶的最新推文。爲了避免碰到Twitter速率限制(150個請求p/h),我讓應用程序將搜索結果緩存在memcache(Dalli)中,並且過期5分鐘。這很好地工作,確保應用程序每小時只有12個請求。如果它被高度販賣,這個解決方案可能會有問題,但因爲它是我認爲它很好。在Heroku上託管的網站的Twitter費率限制
儘管事實上我遠低於速率限制,但我的網站定期停機並查看我的服務器日誌,這是因爲我已經超過了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'
使用自定義域或something.heroku.com?也許限制是基於* .heroku.com? – typeoneerror 2012-02-20 22:56:38
請發佈您的日誌的相關部分。目前我們沒有什麼可以離開的。我懷疑這是Heroku(儘管我認爲這是可能的),但我們需要更多的信息來說明它可能是什麼。另外,您是否檢查過您的Twitter開發設置以確保它不處於某種演示模式?你是否也絕對相信,你每小時只能擊中Twitter 12次(也許每5分鐘實際上有多個請求,你沒有意識到)? – jefflunt 2012-02-20 22:58:09
@normalocity當然。增加了日誌的一部分。我在Tweet之前將我的費率限制寫入屏幕(讓您的費率限制狀態不計入您的API請求),並且我可以看到它沒有比預期的更快地下降。 – Undistraction 2012-02-20 23:01:43