Domanda

Ho un app che crea set EC2 istanze - Ho un compito resque che configurare il server (via ssh) una volta che è installato e funzionante:

    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

ottengo un errore:

*** (Job{serverbuild} | ServerBuilder | [22]) failed: #<Errno::ECONNREFUSED: Connection refused - connect(2)>

Se eseguo questo da IRB, o dalla mia applicazione Rails, è collega bene. Ogni pensiero?

È stato utile?

Soluzione

E 'un problema di temporizzazione - istanze EC2 sono "up" prima che l'accetterà le richieste ssh. Ho salvato l'errore ritentato di nuovo in 20 secondi (fino a 5 volte). ora di lavoro.

  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
Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top