1

http経由で応答を取得する機能があります。いくつかのテストを実行します。最近、テストが終わらないことが起こり始めました。そこで、タイムアウトを導入しました。次に、データベース サーバーを停止すると、テスト スクリプトが db エラーで終了することがわかりました。これは実際には、テストが期待どおりに終了しなかった理由の非常に良いリードです。したがって、エラーを取得すると、時間を節約できます。テスト全体を手動で再現する必要がないからです。

Q1:接続をタイムアウトさせ、データベース サーバーの再起動後に応答を取得する方法はありますか? 同じテキストが再び開始されるため、http 要求を再度送信できないことに注意してください。

Q2: HTTP 応答を「待機」する間にタイマーを導入することが解決策になると思います。しかし、私はそれを行う方法がわかりません。何か案が?

私の機能は

def execute_db2_script(url)
  db2_database = 'RATIONAL'
  http_read_timeout=$http_read_timeout
  uri = URI.parse(url)
  start = Time.new

  connection = Net::HTTP.new(uri.host, 443)
  connection.use_ssl = true
  begin 
    response = connection.start() do |http|
      http.open_timeout =  50
      http.read_timeout = http_read_timeout
      http.request_get(uri.request_uri)
    end
  rescue Timeout::Error
    time_out_message ="security time out - after #{$http_read_timeout} sec"
  return time_out_message       
  end       
  return response.body.gsub("\n","<BR>")
end
4

1 に答える 1

2

retryキーワードを使用できます

def execute_db2_script(url)
  ...
  begin 
    ...
  rescue Timeout::Error
    time_out_message ="security time out - after #{$http_read_timeout} sec"
    if "the server is going to restart then"
      retry # this will restart begin-rescue-end block again
    else
      return time_out_message       
    end
  end       

  response.body.gsub("\n","<BR>")
end
于 2012-05-17T23:46:37.900 に答える