应优先选用rbenv或rvm而非系统包管理器安装Ruby,因apt/dnf安装的ruby-full版本陈旧、gem源不稳定且无法切换版本,易导致gem install卡SSL错误、bundler失败及Rails项目无法运行。

直接装 ruby-full 或用 rvm 是最稳妥的起点,但选错方式会导致后续 gem install 失败、bundler 报错、甚至 Rails 项目根本起不来。
用 apt/dnf 装完发现 gem install 卡住或报 SSL 错误
系统包管理器(如 apt install ruby-full)确实快,但它把 Ruby 装在 /usr/bin/ruby,权限受限、gem 源默认走国外 CDN、且无法切换版本。国内用户常遇到:
ERROR: While executing gem ... (Gem::RemoteFetcher::FetchError) SSL_connect returned=1 errno=0 state=SSLv3 read server certificate B: certificate verify failed-
Fetching nokogiri-1.16.8.gem卡死十分钟,最后超时
这不是网络问题,是系统版 Ruby 自带的证书库过旧 + rubygems.org 国内访问不稳定。临时解法是换源:gem sources --add https://ruby.taobao.org/ --remove https://rubygems.org/,但更推荐从一开始就避开这个坑。
rbenv 和 rvm 到底该选哪个
rbenv 轻量、只管版本切换;rvm 重一点,但自带 gemset 隔离、自动处理 OpenSSL 编译依赖、对 Rails 项目兼容性更好——尤其当你需要同时维护老项目(Ruby 2.7.18 + Rails 6.1)和新项目(Ruby 3.3.5 + Rails 7.2)时,rvm 更省事。
实操建议:
- 确认没用
sudo装 rvm:它必须以普通用户身份运行,否则~/.rvm权限错乱,后续所有rvm install都会失败 - 别信
rvm install ruby—— 它可能装 nightly 版本,要用rvm install 3.3.5这样明确写死的版本号 - 装完立刻执行
rvm use 3.3.5 --default,再验证which ruby输出是否为~/.rvm/rubies/ruby-3.3.5/bin/ruby
装 Ruby 前必须装哪些依赖,漏一个就编译失败
Ruby 源码编译阶段对系统库很敏感,缺任意一个都会卡在 configure 或 make。不同发行版命令不同,但核心依赖一致:
- Ubuntu/Debian:
sudo apt install -y git curl build-essential libssl-dev libreadline-dev zlib1g-dev libyaml-dev libffi-dev - CentOS/RHEL/Fedora:
sudo dnf groupinstall -y "Development Tools" && sudo dnf install -y openssl-devel readline-devel zlib-devel libyaml-devel libffi-devel
特别注意:libffi-dev(Debian系)或 libffi-devel(RHEL系)漏掉会导致 nokogiri、psych 等关键 gem 编译失败,错误信息常藏在 gem make install 的中间日志里,不容易定位。
真正麻烦的不是“怎么装”,而是装完后 bundle install 仍失败——那大概率是 gem 源没切、OpenSSL 路径没对齐、或者 ~/.rvm 权限被 sudo 污染过。这些点不提前踩一遍,调试起来比重装还费时间。











