How to catch the Faraday::Error::ConnectionFailed exception with Faraday?

StackOverflow https://stackoverflow.com/questions/14942154

  •  10-03-2022
  •  | 
  •  

سؤال

If I run an HTTP request from Faraday, while the network is not available (i.e. in a wifi environment or working offline), it would be nice to have something catching this exception by default:

/Users/pmu/.rbenv/versions/1.9.3-p194/lib/ruby/1.9.1/net/http.rb:762:in `initialize': getaddrinfo: nodename nor servname provided, or not known (Faraday::Error::ConnectionFailed)
    from /Users/pmu/.rbenv/versions/1.9.3-p194/lib/ruby/1.9.1/net/http.rb:762:in `open'
    from /Users/pmu/.rbenv/versions/1.9.3-p194/lib/ruby/1.9.1/net/http.rb:762:in `block in connect'
    from /Users/pmu/.rbenv/versions/1.9.3-p194/lib/ruby/1.9.1/timeout.rb:54:in `timeout'
    from /Users/pmu/.rbenv/versions/1.9.3-p194/lib/ruby/1.9.1/timeout.rb:99:in `timeout'
    from /Users/pmu/.rbenv/versions/1.9.3-p194/lib/ruby/1.9.1/net/http.rb:762:in `connect'
    from /Users/pmu/.rbenv/versions/1.9.3-p194/lib/ruby/1.9.1/net/http.rb:755:in `do_start'
    from /Users/pmu/.rbenv/versions/1.9.3-p194/lib/ruby/1.9.1/net/http.rb:744:in `start'
    from /Users/pmu/.rbenv/versions/1.9.3-p194/lib/ruby/1.9.1/net/http.rb:1284:in `request'
    from /Users/pmu/.rbenv/versions/1.9.3-p194/lib/ruby/1.9.1/net/http.rb:1026:in `get'
    from /Users/pmu/.rbenv/versions/1.9.3-p194/lib/ruby/gems/1.9.1/gems/faraday-0.8.5/lib/faraday/adapter/net_http.rb:73:in `perform_request'
    from /Users/pmu/.rbenv/versions/1.9.3-p194/lib/ruby/gems/1.9.1/gems/faraday-0.8.5/lib/faraday/adapter/net_http.rb:38:in `call'
    from /Users/pmu/.rbenv/versions/1.9.3-p194/lib/ruby/gems/1.9.1/gems/faraday-0.8.5/lib/faraday/response.rb:8:in `call'
    from /Users/pmu/.rbenv/versions/1.9.3-p194/lib/ruby/gems/1.9.1/gems/faraday-0.8.5/lib/faraday/response/logger.rb:20:in `call'
    from /Users/pmu/.rbenv/versions/1.9.3-p194/lib/ruby/gems/1.9.1/gems/faraday-0.8.5/lib/faraday/request/authorization.rb:36:in `call'
    from /Users/pmu/.rbenv/versions/1.9.3-p194/lib/ruby/gems/1.9.1/gems/faraday-0.8.5/lib/faraday/request/url_encoded.rb:14:in `call'
    from /Users/pmu/.rbenv/versions/1.9.3-p194/lib/ruby/gems/1.9.1/gems/faraday-0.8.5/lib/faraday/request/multipart.rb:13:in `call'
    from /Users/pmu/.rbenv/versions/1.9.3-p194/lib/ruby/gems/1.9.1/gems/faraday-0.8.5/lib/faraday/connection.rb:245:in `run_request'
    from /Users/pmu/.rbenv/versions/1.9.3-p194/lib/ruby/gems/1.9.1/gems/faraday-0.8.5/lib/faraday/connection.rb:98:in `get'
    from /Users/pmu/projects/bar/cli/lib/foo/rest_client.rb:32:in `list'

How would it be possible to have Faraday by default catch this problem?

هل كانت مفيدة؟

المحلول

If you want it to do something nicer than a full stacktrace, you could do something like this in the base of your faraday setup:

begin
 @app.call(env)
rescue Faraday::Error::ConnectionFailed => e
  puts "Connection failed: #{e}"
  # Choose what you want to happen, for example in my gem I do
  exit 1
end
مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top