使用 Feedzirra 时出现 LoadError - “打开的文件过多”。我使用默认的 WEBrick 服务器在我的开发服务器上运行它。
我只解析 2 个提要。问题是什么?
使用 Feedzirra 时出现 LoadError - “打开的文件过多”。我使用默认的 WEBrick 服务器在我的开发服务器上运行它。
我只解析 2 个提要。问题是什么?
我对 Feedzirra 也有同样的问题。您会注意到它使 TCP 连接CLOSE_WAIT
永远处于状态,从而导致问题。
它似乎curb
是用于获取提要的特定于宝石的。另一个依赖 libcurl 的项目也有同样的问题。他们通过设置“CURLOPT_FORBID_REUSE”选项来修复它。
我尝试为 Feedzirra 做同样的事情,但没有成功。即使有了这个选项,我最终还是有越来越多的CLOSE_WAIT
会话和Too many open files
错误。
所以我做了最直接的事情,我使用以下方式下载提要Net::HTTP
:
def get_contents(furl)
url = URI.parse(furl)
req = Net::HTTP::Get.new(url.to_s)
res = Net::HTTP.start(url.host, url.port) { |http|
http.request(req)
}
unless res.kind_of? Net::HTTPSuccess
puts "can't get feed #{url.to_s}: #{res.code}"
return nil
end
res.body
end
然后我用 Feedzirra 解析 XML:
xml = get_contents(furl)
feedin = Feedzirra::Feed.parse xml
没有更多的卡住连接,也没有更多的错误。您可能还希望在此示例代码中添加更好的错误处理。