rescue_me
Provides a convenience method to retry blocks of code that might fail due to temporary errors, e.g. a network service that becomes temporarily unavailable. The retries are timed to back-off exponentially (2^n seconds), hopefully giving time for the remote server to recover. These are the default wait times between consecutive attempts:
0, 1, 2, 4, 8, 16, 32, 64, 128, ... seconds
Usage:
rescue_and_retry(max_attempts, *temporary_exceptions) {
# your code
}
Example - retry my code up to 7 times (over about a minute) if I see the following 2 network errors:
rescue_and_retry(7, Net::SMTPServerBusy, IOError) {
smtp.(, from_address, to_address )
}
Log output:
WARN -- : rescue_and_retry(1/5) "SMTPServerBusy: 451 4.3.0 Mail server temporarily rejected message." in ./mailer.rb:43
WARN -- : rescue_and_retry(2/5) "SMTPServerBusy: 451 4.3.0 Mail server temporarily rejected message." in ./mailer.rb:43
WARN -- : rescue_and_retry(3/5) "SMTPServerBusy: 451 4.3.0 Mail server temporarily rejected message." in ./mailer.rb:43
# No further output or stacktrace. Block succeeded on 4th attempt.
Copyright
Copyright © 2010 Arild Shirazi. All rights reserved.
See LICENSE for details.