Net::SSHを使用して別のサーバーに接続しています。正常に動作しますが、接続できない状況に対処できるようにしたいです。メソッドのドキュメントには、例外については何も言及されておらず、私が見る限り、例外は発生しません。次の例では、存在せず、キーがないホストとユーザーを渡しても、例外は発生しません。
失敗したかどうかを確認できる唯一の方法は、@session を確認することです。これは nil になりますが、失敗した理由については何もわかりません。
begin
@session = Net::SSH.start('no-host', 'no-user', keys: [])
rescue SocketError => e
connection_failed = true
logger.error "SOCKET ERROR: "+e.message
rescue Net::SSH::AuthenticationFailed
connection_failed = true
logger.error "AUTH ERROR: "+e.message
rescue Exception => e
logger.error "EXCEPTION: "+e.message
end
[更新] irb で以下を実行すると、SocketError が発生します。
> require 'net/ssh'
> Net::SSH.start('no-host', 'no-user', keys: [])
= SocketError: getaddrinfo: nodename nor servname provided, or not known
アプリで例外が発生しないのはなぜですか?