You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

MacOS Monterey本地Rspec测试间歇性报Too many open files错误求助

macOS Monterey本地Rspec测试间歇性报"Too many open files"问题

我正在开发一个带有完整Rspec测试套件的开源Ruby on Rails项目,测试在CI/CD流水线服务器上运行正常,但在我运行Monterey系统的MacBook本地会间歇性失败——全程无代码变更,有时零测试失败,有时少数失败,有时上百个失败。

错误信息

间歇性失败的测试会抛出多种错误:

Errno::EMFILE:
       Failed to open TCP connection to 127.0.0.1:9520 (Too many open files - socket(2) for "127.0.0.1" port 9520)

该错误会出现在多个端口上,已发现的端口包括9515、9517、9518、9520、9522、9529、9533和9536。

还遇到大量其他提示"too many open files"的错误:

Failure/Error: Capybara::Webmock.start Errno::EMFILE: Too many open files
Errno::EMFILE: Too many open files - rackup
Errno::EMFILE: Too many open files - /Users/username/.webdrivers/chromedriver

我认为这些间歇性错误都源于同一个问题,搜索相关错误后指向Chromedriver、Selenium、Capybara和WebMock。

已尝试的解决方法

  • 执行ulimit -Sn 61440增加可用文件描述符数量
  • 通过launchctl limit maxfiles增加系统可用文件数
  • 检查chromedriver -v版本与本地Chrome浏览器版本匹配
  • 执行bundle exec rails tmp:clear和Rails.cache.clear,并设置Cache-Control头为public, no-cache, must-revalidate来清除缓存
  • 按照WebMock文档,在配置中添加net_http_connect_on_start: true
  • 执行killall chromedriver清理僵尸chromedriver进程

代码配置

WebMock配置已允许本地连接,内容如下:

require 'webmock/rspec'
WebMock.disable_net_connect!(
  allow: [
    /localhost/,
    /127\.0\.0\.1/,
    /codeclimate.com/, # 用于上传覆盖率报告
    /chromedriver\.storage\.googleapis\.com/, # 用于获取chromedriver二进制文件
  ],
)

Capybara采用项目内的标准配置。

内容的提问来源于stack exchange,提问作者John Skiles Skinner

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.17 14:30:53