1

EC2 インスタンスの作成を設定するアプリがあります。サーバーが起動して実行されたら、(ssh 経由で) サーバーを構成する resque タスクがあります。

    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 に答える