我有一个应用程序设置创建EC2实例 - 我有一个resque任务,将配置服务器(通过ssh)一旦启动并运行:
Net::SSH.start(server.dns_name, 'root', :keys => ['~/.ssh/testkey.pem'], :paranoid => false, :verbose => :debug) do |ssh|
result = ssh.exec!("ls -l")
puts result
end
我收到错误:
*** (Job{serverbuild} | ServerBuilder | [22]) failed: #<Errno::ECONNREFUSED: Connection refused - connect(2)>
如果我从irb或者我的rails应用程序运行它,它连接就好了。有什么想法吗?
答案 0 :(得分:3)
这是一个时间问题 - EC2实例在接受ssh请求之前“up”。我在20秒内(最多5次)重新获得了重试的错误。现在正在工作。
begin
Net::SSH.start(server.dns_name.to_s, 'root', :keys => ['/Users/stevebrewer/.ssh/testkey.pem'], :paranoid => false) do |ssh|
result = ssh.exec!("ls -la")
puts result
end
rescue
if(retries < 5)
Resque.enqueue_at(20.seconds.from_now, ServerBuilder, server_id, retries + 1)
end
end