gpt4 book ai didi

ruby-on-rails - Net/SSH.start 失败时不会抛出异常

转载 作者:数据小太阳 更新时间:2023-10-29 07:53:26 26 4
gpt4 key购买 nike

我正在使用 Net::SSH连接到另一台服务器。它工作正常,但我希望能够处理无法连接的情况。 Documentation因为该方法没有提及任何异常,据我所知,它也没有引发任何异常。在以下示例中,传递不存在且没有 key 的主机和用户不会引发异常。

我可以检查它是否失败的唯一方法是查看@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

为什么这不会在我的应用中引发异常?

最佳答案

我正在尝试挽救一些异常,这对我有用:

def mydef
begin
Net::SSH.start("host", "user", :password => "password", :timeout => 10) do |ssh|
#stuff
end
rescue Timeout::Error
@error = " Timed out"
rescue Errno::EHOSTUNREACH
@error = " Host unreachable"
rescue Errno::ECONNREFUSED
@error = " Connection refused"
rescue Net::SSH::AuthenticationFailed
@error = " Authentication failure"
end
end

然后可能在 View 中使用@error

关于ruby-on-rails - Net/SSH.start 失败时不会抛出异常,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14566348/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com