Errno::ECONNRESET:使用 rest-client 在 Rails 中由对等方重置连接

Pav*_*van 6 ruby ruby-on-rails passenger phusion rest-client

我们有一个 Ruby on Rails 应用程序,它具有“搜索”功能(搜索某个公司)。从浏览器用户输入一些名称并点击搜索,这个搜索对外部系统进行一个休息 api 调用,并为我们提供一些搜索结果。

我们正在使用“ rest-client ”(用于 Ruby on Rails)。

我注意到这似乎工作了几个小时,突然间我的搜索似乎突然中断了,我可以在我的日志中看到:

Errno::ECONNRESET: 连接由对等方重置

我们试图通过查看日志来调查这个问题,但我们没有看到任何日志。

如果我们需要再次进行此搜索,我们需要重新启动乘客,然后它会立即生效。这只发生在生产环境中。我在分期测试它似乎工作得很好。

问题:

  1. 什么可能导致这个“重置问题”
  2. 为什么在我的 prod 乘客重置后它又开始工作了。
  3. 我们使用reset-client 应该写一段代码,在这个异常发生时手动关闭连接。
  4. 防火墙中的任何问题都可能导致这种情况?
  5. 是否有任何代码可以放在异常中以重新启动此连接,以便下一次调用成功。

代码:

def call
   resp_data = RestClient.get(@request_url, @header)
   rescue => error
     puts 'Exception: ' error.message
end
Run Code Online (Sandbox Code Playgroud)

foo*_*dev 1

尝试以下操作

resp_data = RestClient::Request.new(
    method: :get,
    url: @request_url, #=> https://api.example.com/auth2/endpoint
    :headers => {
        :Authorization => @header, #=> "Bearer access_token",
    }
)

rescue => error
    puts 'Exception: ' error.message
Run Code Online (Sandbox Code Playgroud)