安装rbenv后如何解决Ruby Gem依赖冲突及版本不兼容问题?
解决方案:Ruby/Rails 环境配置与依赖问题排查
我来帮你逐个拆解遇到的问题,都是 rbenv 环境切换和 gem 编译兼容性的典型场景:
1. Gem 扩展未构建的报错(json、nokogiri 等)
你看到的 Ignoring xxx because its extensions are not built 提示,核心原因是这些 gem 之前是针对其他 Ruby 版本编译的,和当前 rbenv 激活的 2.3.1 不兼容。解决步骤:
- 先确认当前 Ruby 版本是 rbenv 的 2.3.1:
如果输出不是rbenv version2.3.1 (set by ...),执行rbenv local 2.3.1(仅当前目录生效)或rbenv global 2.3.1(全局生效)切换版本。 - 按提示重新构建对应 gem 的扩展:
更高效的方式是直接重建整个项目的依赖:gem pristine json --version 2.1.0 gem pristine nokogiri --version 1.8.1 gem pristine unf_ext --version 0.0.7.4 gem pristine yajl-ruby --version 1.3.1rm -rf vendor/bundle bundle install --force
2. ffi 库版本不兼容的 LoadError
这个报错是因为 ffi 编译时依赖的系统库或 Ruby 版本与当前环境不匹配。解决方法:
- 先卸载当前的 ffi 版本:
gem uninstall ffi -v 1.9.18 - 强制从源码重新编译安装(避免预编译二进制的兼容性问题):
如果还是失败,先安装系统级的 ffi 依赖库:gem install ffi -v 1.9.18 --platform=ruby # 或者用 bundle 重新安装所有依赖: bundle install --build-native- Debian/Ubuntu 系统:
sudo apt-get install libffi-dev - CentOS/RHEL 系统:
sudo yum install libffi-devel
安装完成后再重新编译 ffi。
- Debian/Ubuntu 系统:
3. rails new 自动使用 5.1.6 而非指定的 5.1.1
这是因为你的 rbenv 环境中,全局或本地的 rails 默认版本不是 5.1.1。要生成指定版本的项目,需要:
- 先把 Rails 5.1.1 安装到当前 Ruby 2.3.1 环境:
gem install rails -v 5.1.1 - 用版本号指定的方式生成项目:
这样就能强制使用 5.1.1 版本创建项目,不会自动拉取最新的小版本。rails _5.1.1_ new app_name
额外小贴士
- 每次切换 Ruby 版本后,执行
gem pristine --all可以批量重建所有 gem 的扩展,避免后续出现类似兼容性问题。 - 切换版本后别忘了执行
rbenv rehash,刷新 rbenv 的命令路径,确保调用的是当前版本的 gem 命令。
内容的提问来源于stack exchange,提问作者Alexander Gorg
相关产品推荐
相关产品推荐

