Sha256: 383163c423ea7477584728bf2ccb05fa81e666e6db3fb9f04295fe94c13b3b42

Contents?: true

Size: 849 Bytes

Versions: 7

Compression:

Stored size: 849 Bytes

Contents

module Houston

  def self.try(options, *rescue_from)
    options = { max_tries: options } if options.is_a?(Fixnum)
    options = {} unless options.is_a?(Hash)
    max_tries = options.fetch :max_tries, 3
    base = options.fetch :base, 2
    ignore = options.fetch :ignore, false

    tries = 1
    begin
      yield tries
    rescue *rescue_from
      unless (tries += 1) <= max_tries
        return if ignore
        raise
      end
      Rails.logger.warn "\e[31m[try] \e[1m#{$!.class}\e[0;31m: #{$!.message}\e[0m"
      sleep base ** tries
      retry
    end
  end

  def self.reconnect(options={})
    max_tries = options.fetch(:max_tries, 2)
    tries = 1
    begin
      yield
    rescue exceptions_wrapping(PG::ConnectionBad)
      ActiveRecord::Base.connection.reconnect!
      retry unless (tries += 1) > 2
      raise
    end
  end

end

Version data entries

7 entries across 7 versions & 1 rubygems

Version Path
houston-core-0.8.0.pre2 config/initializers/houston_try.rb
houston-core-0.8.0.pre config/initializers/houston_try.rb
houston-core-0.7.0 config/initializers/houston_try.rb
houston-core-0.7.0.beta4 config/initializers/houston_try.rb
houston-core-0.7.0.beta3 config/initializers/houston_try.rb
houston-core-0.7.0.beta2 config/initializers/houston_try.rb
houston-core-0.7.0.beta config/initializers/houston_try.rb