6

我们有一个 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
4

2 回答 2

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
于 2018-03-30T04:41:23.223 回答
0

它非常有线。我遇到了同样的问题。

我的脚本如下所示:(在我的本地机器上工作得很好,在远程服务器上工作得很好,直到有一天磁盘满了,这个脚本死了,说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 server 16,8核CPU,50G ram

当我发现我的硬盘被 100% 使用时,就会出现这个问题。没有空间了。

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

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

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

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

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

工作 CURL 脚本如下所示:

$ curl -X POST "https://api-cn.faceplusplus.com/cardpp/v1/ocridcard" \ 
-F "api_key=Td_XijYBCOYh-Rf_kCMj" \
-F "api_secret=iheWYoQcbCPM9n2VS" \
-F "image_file=@scripts/id_card.jpg
于 2018-07-07T08:50:14.700 回答