twitter_retryとは?
Twitter APIのエラーをいい感じにエラーハンドリングして、必要に応じていい感じにリトライするためのgemです
作った経緯
TwitterのAPIを実行するとたまにTwitterが調子が悪くてエラーになったりすることがあります。リトライすれば成功する可能性のあるエラーは自動でリトライしたくて作りました。
一応社内でTwitter API使ってるアプリを2〜3個くらい見て処理を汎用化しています。
使い方
TwitterRetry.with_handing do
# some twitter API code
twitter.update("some tweet")
end
TwitterRetry.with_handing
のブロックの中でTwitter gem の処理を書くだけで、
- 「Your account is suspended and is not permitted to access this feature.(凍結済みユーザのエラー)」が投げられたら
TwitterRetry::SuspendedError
を投げる - 「User is over daily status update limit.(一時的な規制)」 や 「Status is a duplicate.(重複連投)」などが投げられたらエラーは握りつぶす
- Twitter側の一時的なエラー(Over capacityやInternal errorなど)が投げられたら1秒待って3回までリトライ。それでダメなら
TwitterRetry::RetryOverError
を投げる
と、いい感じにエラーハンドリングを行います。
TwitterRetry.with_handing
の戻り値は通常は true
ですが、リトライしても成功する可能性が低く呼び出し側でも握りつぶしたいエラー 1 の場合はリトライを行わず false
を返します。
カスタマイズ
TwitterRetry.configure do |config|
config.sleep_second = 1
config.max_retry_count = 3
config.retryable_errors << [Twitter::Error, "some error message"]
config.ignorable_errors << [Twitter::Error, "some error message"]
end
デフォルトの設定 でだいたい事足りると思いますが、もしリトライ対象のエラーや握りつぶしたいエラーを追加したい場合には retryable_errors
や ignorable_errors
に追加してください。
-
「Status is a duplicate.」 や「User is over daily status update limit.」など ↩