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

我们有一个Ruby on Rails应用程序,它具有“搜索”function(搜索某些公司)。 从浏览器用户键入一些名称和点击搜索,此搜索对外部系统进行restapi调用,并获取一些搜索结果。

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

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

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

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

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

问题:

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

码:

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

尝试以下方法

 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 

这很有线。 我遇到了同样的问题。

我的脚本如下所示:(在我的本地机器上工作得很好,在远程服务器上工作很好,直到有一天磁盘已满并且这个脚本死了,说: Errno::ECONNRESET: Connection reset by peer

 ENV['RAILS_ENV'] = ARGV.first || ENV['RAILS_ENV'] || 'production' require File.expand_path(File.dirname(__FILE__) + "/../config/environment") require 'rails' require 'rubygems' require 'rest-client' url = 'https://api-cn.faceplusplus.com/cardpp/v1/ocridcard' id_card = File.expand_path(File.dirname(__FILE__) + "/id_card.jpg") puts "== id_card: #{id_card}" response = RestClient.post url, { api_key: 'Td_XijYBZUMp', api_secret: 'ihehEuWYwOWM', image_file: File.open(id_card, 'rb') } puts "==response: " puts response.inspect 

我的环境:ruby 2.5.0,ubuntu服务器16,带8核CPU,50G内存

当我发现我的硬盘100%使用时会发生此问题。 没有空间。

但是,一旦我释放了足够的磁盘空间,就存在这个问题。

重新启动服务器后,存在此问题。

当我在rails下运行此脚本时,存在此问题。

但是,当我单独运行此脚本时,它运行正常。

所以,最后,我转向“curl”命令。 效果很好!

工作CURL脚本如下所示:

 $ curl -X POST "https://api-cn.faceplusplus.com/cardpp/v1/ocridcard" \ -F "api_key=Td_XijYBCOYh-Rf_kCMjqvHFHDD" \ -F "api_secret=iheWYoQcbCPM9n2VS0cOyQl" \ -F "image_file=@scripts/id_card.jpg