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

M1 Mac更新Ruby至3.1.2后运行RSpec+Capybara测试报fork()未实现错误

问题描述

近期通过rvm将Ruby版本从3.1.0更新至3.1.2,运行bundle exec rspec [filename_spec.rb]执行功能测试时出现以下错误:

NotImplementedError:
            fork() function is unimplemented on this machine
          # /Users/myuser/.rvm/gems/ruby-3.1.2/gems/childprocess-4.1.0/lib/childprocess/unix/fork_exec_process.rb:20:in `fork'
          # /Users/myuser/.rvm/gems/ruby-3.1.2/gems/childprocess-4.1.0/lib/childprocess/unix/fork_exec_process.rb:20:in `launch_process'
          # /Users/myuser/.rvm/gems/ruby-3.1.2/gems/childprocess-4.1.0/lib/childprocess/abstract_process.rb:81:in `start'
          # /Users/myuser/.rvm/gems/ruby-3.1.2/gems/selenium-webdriver-4.5.0/lib/selenium/webdriver/common/service_manager.rb:109:in `start_process'
          # /Users/myuser/.rvm/gems/ruby-3.1.2/gems/selenium-webdriver-4.5.0/lib/selenium/webdriver/common/service_manager.rb:56:in `block in start'
          # /Users/myuser/.rvm/gems/ruby-3.1.2/gems/selenium-webdriver-4.5.0/lib/selenium/webdriver/common/socket_lock.rb:41:in `locked'
          # /Users/myuser/.rvm/gems/ruby-3.1.2/gems/selenium-webdriver-4.5.0/lib/selenium/webdriver/common/service_manager.rb:54:in `start'
          # /Users/myuser/.rvm/gems/ruby-3.1.2/gems/selenium-webdriver-4.5.0/lib/selenium/webdriver/common/service.rb:84:in `launch'
          # /Users/myuser/.rvm/gems/ruby-3.1.2/gems/selenium-webdriver-4.5.0/lib/selenium/webdriver/common/driver.rb:341:in `service_url'
          # /Users/myuser/.rvm/gems/ruby-3.1.2/gems/selenium-webdriver-4.5.0/lib/selenium/webdriver/common/driver.rb:321:in `create_bridge'
          # /Users/myuser/.rvm/gems/ruby-3.1.2/gems/selenium-webdriver-4.5.0/lib/selenium/webdriver/common/driver.rb:74:in `initialize'
          # /Users/myuser/.rvm/gems/ruby-3.1.2/gems/selenium-webdriver-4.5.0/lib/selenium/webdriver/common/driver.rb:47:in `new'
          # /Users/myuser/.rvm/gems/ruby-3.1.2/gems/selenium-webdriver-4.5.0/lib/selenium/webdriver/common/driver.rb:47:in `for'
          # /Users/myuser/.rvm/gems/ruby-3.1.2/gems/selenium-webdriver-4.5.0/lib/selenium/webdriver.rb:89:in `for'
          # /Users/myuser/.rvm/gems/ruby-3.1.2/gems/capybara-3.36.0/lib/capybara/selenium/driver.rb:83:in `browser'
          # ./spec/rails_helper.rb:143:in `block (2 levels) in <top (required)>'

已尝试操作:卸载旧版本Ruby 3.1.0、重新运行bundle install、重新安装Ruby 3.1.2。

解决方案

该错误多出现于Apple Silicon(M1/M2)设备,核心是Ruby环境或childprocess gem对fork系统调用的兼容问题,可按以下步骤解决:

  • 切换Ruby安装架构(Rosetta兼容模式)
    如果是Apple Silicon设备,用Rosetta架构重新安装Ruby 3.1.2:

    arch -x86_64 rvm uninstall 3.1.2
    arch -x86_64 rvm install 3.1.2
    arch -x86_64 rvm use 3.1.2 --default
    bundle install
    

    也可以直接右键终端→显示简介,勾选「使用Rosetta打开」,重启终端后重新执行测试。

  • 升级childprocess gem
    当前使用的childprocess 4.1.0对Apple Silicon支持不完善,升级到兼容版本:
    在Gemfile中修改:

    gem 'childprocess', '~> 4.2.0'
    

    然后执行:

    bundle update childprocess
    
  • 强制childprocess使用posix_spawn替代fork
    在spec/rails_helper.rb或spec/spec_helper.rb的开头(Capybara初始化前)添加配置:

    require 'childprocess'
    ChildProcess.posix_spawn = true
    

    该配置会让childprocess使用posix_spawn替代fork,规避系统调用不兼容问题。

内容的提问来源于stack exchange,提问作者halpmeh

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.14 20:50:54