1

我有一个设置创建 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 应用程序运行它,它的连接就很好。有什么想法吗?

4

1 回答 1

3

这是一个时间问题 - EC2 实例在接受 ssh 请求之前“启动”。我在 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
于 2010-09-22T22:23:16.623 回答