我有一个外部 REST API,它处理在“数据存储”中存储数据。
在文件上传时,它们是一个 Ruby 库,它调用此 API 并将数据数组传递给它,然后由外部 API 将其存储在数据库中。
我尝试将小块数组传递给 API,以限制任何 curl 调用中的帖子正文内容长度。
库调用看起来像这样
def add_data(table_name, table_data)
url = "#{ExternalAPI::URL}/addData"
m_curl = Curl::Multi.new
begin
chunks = table_data.each_slice(ExternalAPI::BATCH_SIZE).to_a
chunks.each do |data_chunk|
data = {
"tableName" => table_name,
"data" => data_chunk
}.to_json
curl = Curl::Easy.new(url)
curl.headers = {}
curl.headers['Content-type'] = 'text/plain'
curl.timeout = 300
curl.post_body = data
m_curl.add(curl)
end
m_curl.perform
true
rescue Exception => e
puts "Curl Failed #{e.message}"
puts "#{e.backtrace}"
Rails.logger.error "Curl Failed #{e.message}"
return false
end
end
这会导致 Webrick 在开发模式下打开连接过多错误。我假设Multi::Curl
要么回收连接,但我不确定这是否在内部发生。
我还尝试在循环中创建一个新的 curl 连接并在for
循环结束时将其关闭(我知道它效率低下),但它仍然导致了同样的错误。
任何人都可以对此有所了解吗?