使用Feedzirra时,我收到一个LoadError - “太多打开的文件”。我使用默认的WEBrick服务器在我的开发服务器上运行它。
我只解析了2个Feed。有什么问题?
答案 0 :(得分:0)
我和Feedzirra有同样的问题。您可以注意到它会永远保留CLOSE_WAIT
状态的TCP连接,从而导致问题。
它似乎是curb
gem特定的,用于获取Feed。另一个项目取决于libcurl had the same issue。他们通过设置'CURLOPT_FORBID_REUSE'选项修复了它。
我试图为Feedzirra做同样的事情,但没有成功。即使使用此选项,我最终会遇到越来越多的CLOSE_WAIT
个会话和Too many open files
错误。
所以我做了最直接的事情,我使用Net::HTTP
下载Feed:
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
不再卡住连接,不再有错误。您可能还希望为此示例代码添加更好的错误处理。