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
相关产品推荐
相关产品推荐

