使用Feedzirra导航太多打开的文件

时间:2013-08-22 08:01:00

标签: ruby-on-rails feedzirra

使用Feedzirra时,我收到一个LoadError - “太多打开的文件”。我使用默认的WEBrick服务器在我的开发服务器上运行它。

我只解析了2个Feed。有什么问题?

1 个答案:

答案 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

不再卡住连接,不再有错误。您可能还希望为此示例代码添加更好的错误处理。