Соединение Net :: SSH не выполняется изнутри - PullRequest
1 голос
/ 23 сентября 2010

У меня есть приложение, которое устанавливает, создает экземпляры 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, оно подключается просто отлично. Есть мысли?

1 Ответ

3 голосов
/ 23 сентября 2010

Это проблема синхронизации - экземпляры 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
...