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

Mac M3(Sonoma系统)无法bundle安装nio4r 2.5.8求助

解决M3 Mac Sonoma下安装nio4r 2.5.8失败的问题

从报错日志看,核心问题是nio4r 2.5.8的C扩展代码在ARM架构的Sonoma系统中,与Ruby 3.0.2的函数签名不兼容,具体是selector.c里传递给rb_ensure的函数指针类型不匹配。以下是几种可行的解决方向:

1. 升级nio4r到兼容版本

旧版本nio4r未适配ARM Mac和Ruby 3.x特性,直接在Gemfile中指定更高版本覆盖Rails依赖:

# 放在rails依赖之前
gem 'nio4r', '>= 2.5.9'
gem 'rails', '7.0.4.3'

执行:

bundle install

2. 跳过Action Cable(若无需使用)

如果项目用不到Action Cable,可直接排除它的安装:

  • 新建Rails项目时:
    rails new your_app --skip-action-cable
    
  • 已有项目修改Gemfile:
    gem 'rails', '7.0.4.3', require: %w[rails/all].reject { |dep| dep == 'actioncable' }
    

之后执行bundle install,就不会触发nio4r的安装了。

3. 升级Ruby版本

Ruby 3.0.2对ARM Mac的支持不完善,用asdf升级到3.0.x系列最新版(如3.0.6):

asdf install ruby 3.0.6
asdf global ruby 3.0.6
gem install bundler
bundle install

新版本Ruby修复了不少ARM架构下的编译兼容性问题,大概率能解决该错误。

4. 强制忽略编译类型错误

若必须保留当前Ruby和nio4r版本,可通过编译参数跳过类型不兼容错误:

# 配置bundle编译参数
bundle config build.nio4r --with-cflags="-Wno-incompatible-function-pointer-types"
# 重新安装依赖
bundle install

或单独安装nio4r:

gem install nio4r -v '2.5.8' -- --with-cflags="-Wno-incompatible-function-pointer-types"

5. 替换Puma为Unicorn(可选)

如果不需要Puma作为服务器,可换成不依赖nio4r的Unicorn:

# Gemfile中替换
# gem 'puma'
gem 'unicorn'

执行bundle install即可,但注意若保留Action Cable,仍需解决nio4r的问题,此方法仅解决Puma带来的依赖。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.25 22:30:38