0

我在我的应用程序旁边运行了 3 台服务器,我正在向它们发送 RESTful 请求,但我希望有一个循环尝试这三个服务器之一,直到它得到准确的响应。在我的执行中,当它从第一个服务器程序获得错误响应时会引发“BadRespondError”,我无法在我的代码中拯救它,因为执行会转到“actionpack”gem 中的rescue.rb。我怎么能解决这个问题?我可以在不处理异常和错误的情况下仅通过一个简单的循环来解决它吗?或者如果不可能,我怎么能在我的代码中拯救 BadRespondError 而不是 rescue.rb

这是我的代码请求....

@response = carrot.dcs_request(uri, {
       "dcs.source" => "etools",
       "query" => @query,
       "dcs.output.format" => "JSON",
       "dcs.clusters.only" => "false"
      })
@json = @response
@response = JSON.parse(@response)

……

请求函数

def dcs_request(uri, data)

    boundary = Array::new(16) { "%2.2d" % rand(99) }.join()
    extheader = {
      "content-type" => "multipart/form-data; boundary=___#{ boundary }___"
    }
    client = HTTPClient.new
    response = client.post_content(uri, data, extheader)
  end

所以把 uri 想象成一个数组,我想循环它,直到我得到其中一个的准确响应。

4

1 回答 1

0

您可以尝试带有特定错误 (BadResponseError) 的 begin..rescue 子句,例如,

 begin

 rescue Net::IMAP::BadResponseError, Net::IMAP::NoResponseError => e

 end

应用程序代码中的救援子句不应该在 Rails 将错误引发到 ActionPack 的错误处理之前运行吗?(也许我没有正确理解这个问题)

在 Ruby 中开始、拯救和确保?

于 2012-05-08T10:39:54.283 回答