2012-02-20 13 views
1

カスタムドメインを使用してHerokuでホストされているレールアプリケーションがあります。アプリケーションは、各ページの一番上に1人のユーザーによる最新のツイートを表示します。 Twitterレートの制限(150リクエストp/h)を避けるために、私はアプリケーションキャッシュにmemcache(Dalli)の検索結果を5分の有効期限でキャッシュしています。これはうまく機能し、アプリケーションは1時間に12リクエストしか作成できません。非常に人身売買されていた場合、この解決策には問題があるかもしれませんが、その通りです。Twitterのレート限度Herokuでホストされているサイトの制限

レート制限を大幅に下回っているにもかかわらず、私のサイトは定期的にダウンし、私のサーバーのログを見て、私は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' 
+0

カスタムドメインまたはsomething.heroku.comを使用していますか?おそらく限界は* .heroku.comに基づいていますか? – typeoneerror

+0

ログの関連部分を投稿してください。現在、私たちが外出するためのものはありません。私はそれがHerokuだとは思っていますが(それは可能だと思いますが)、それが何であるかを言うにはより多くの情報が必要です。また、あなたのTwitterのdevの設定を確認して、何らかのデモモードになっていないことを確認しましたか?また、あなたの唯一のヒットTwitterは1時間に12回(多分5分ごとに実際に複数のリクエストを持っているかもしれませんが、あなたはそれを認識しません)? – jefflunt

+0

@normalocityはい。ログの一部を追加しました。私はあなたのレート制限ステータスを取得することはあなたのAPI要求にカウントされていません)前に、私のレート制限を画面に書いています。 – Undistraction

答えて

6

非常にシンプル。他の複数の開発者とIPを共有する場合は、レート制限も共有します。

これをIPベースの制限を削除して、1時間に350リクエストにするには、認証を使用することをお勧めします。これにより、IPを共有している開発者に関係なく、には件のリクエストが送信されます。

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

+0

ありがとうございました。そうであれば、限界を上げることさえ確実ではありません。同じIP上の制限に近づいている3つの他のアプリが必要です。これは私にとって狂っているようだ。だから、Twitter APIにヒットするHerokuでホストされているサイトでこのリスクが発生していますか? – Undistraction

+0

私はあなたがすべてのHerokuとIPを共有しているのか分かりませんが、そのボックスの他のダイノスだけが –

+0

Fwiwです。認証すれば、IPベースの制限を取り除くだけです。 –

1

あなたはApigeeアドオンを使用して見たことがありますか?

https://addons.heroku.com/apigee

これはレート制限に加え、他のいくつかの添えものを増加できます。

+0

ありがとうございます。いいえ、私はそれを見ていませんでした。 OauthとApigeeを組み合わせたように見えますが、このトリックはすべきです。 – Undistraction

+0

@Neil "これはherokuにapegee addonのメッセージが表示されています – RAJ

+0

Apigeeはアドオンとして利用できません –