【问题标题】:rails too many open files using Feedzirra使用 Feedzirra 跟踪太多打开的文件
【发布时间】:2013-08-22 08:01:00
【问题描述】:

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

我只解析 2 个提要。有什么问题?

【问题讨论】:

  • 这方面有什么进展吗?如果不是,请描述您的环境并发布相关消息和代码。我刚刚使用 Windows 8、Ruby 193p4448 和带有 Feedzirra 的 Rails 4.0.0 获得了成功。但是,我将提要的数量减少到 2 并且它起作用了。对我来说,这意味着我需要修复 Windows 和/或我正在使用的瘦网络服务器。或者,也许,像我计划的那样迁移到 Apache。

标签: ruby-on-rails feedzirra


【解决方案1】:

我对 Feedzirra 也有同样的问题。您会注意到它使 TCP 连接永远处于CLOSE_WAIT 状态,从而导致问题。

它似乎是 curb gem 特定的,用于获取提要。另一个依赖于 libcurl had the same issue 的项目。他们通过设置'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

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2011-10-11
    • 2023-03-14
    • 1970-01-01
    • 1970-01-01
    • 2012-04-04
    • 2010-09-18
    • 2012-05-09
    相关资源
    最近更新 更多