不能碰/usr/bin/ruby,因其受sip保护、版本老旧且不可写;必须用rbenv安装用户级ruby(如3.4.2),配置~/.zshrc并验证路径一致,再通过bundle install还原依赖。
macos 自带 ruby 是只读的系统组件,不能也不该被用于开发。真正可用的 ruby 环境必须由用户自主安装并受 rbenv 精确控制——这是避免 gem 冲突、xcode 打包失败、依赖错乱的根本前提。
为什么不能碰 /usr/bin/ruby
系统 Ruby 位于 /usr/bin/ruby,它被 SIP(系统完整性保护)锁定,版本老旧(如 Monterey 仍为 2.6.x),且 gem install 会报权限错误或静默失败。Xcode 构建脚本有时会意外继承系统 PATH,导致调用它而非你装的版本,引发 “sqlite3 not found” 或 “data couldn’t be read” 等打包异常。
- 执行
which ruby输出/usr/bin/ruby→ 当前正在用系统 Ruby,需立即切换 -
ruby -v与gem env home路径不一致 → gem 安装位置错乱,后续 bundle install 必然失败 - 直接
sudo gem install可能破坏系统稳定性,官方明确禁止
rbenv 的正确初始化流程
rbenv 不是“装完就用”的工具,初始化必须写入 shell 配置并生效,否则 which ruby 仍指向系统路径。
- 用 Homebrew 安装:
brew install rbenv ruby-build - 写入配置(zsh 用户):
echo 'eval "$(rbenv init - zsh)"' >> ~/.zshrc && source ~/.zshrc - 验证是否加载成功:
type rbenv应输出rbenv is a shell function;rbenv version应显示当前版本(初始为空) - 若
rbenv命令未找到,说明 shell 初始化失败,需检查~/.zshrc是否真包含 init 行,并重启终端或重新source
安装与切换 Ruby 版本的关键操作
rbenv 本身不提供 Ruby,靠 ruby-build 编译安装。Apple Silicon(M1/M2/M3/M4)用户无需额外参数,现代 Ruby(≥3.1)已原生支持 ARM。
- 查最新稳定版:
rbenv install -l | grep "^[0-9]" | tail -5(例如 3.4.2) - 安装:
rbenv install 3.4.2(首次需先运行xcode-select --install) - 设为全局:
rbenv global 3.4.2;验证:ruby -v和which ruby均应指向~/.rbenv/shims/ruby - 项目级锁定:
cd my-project && rbenv local 3.4.2(生成.ruby-version文件)
Gem 依赖必须走 bundle install
有 Gemfile 的项目,绝不要执行 gem install xxx。全局安装会绕过 Gemfile.lock,导致版本漂移和本地/CI 不一致。
- 进入项目目录后,先确认
rbenv local设置与Gemfile.lock中的RUBY VERSION兼容 - 运行
bundle install—— 它会严格按 lock 文件还原,自动处理嵌套依赖冲突 - 国内用户加速:
bundle config set --local mirror.https://rubygems.org https://ruby.taobao.org - 遇到 native extension 编译失败(如 nokogiri):
bundle config build.nokogiri --use-system-libraries











