Ruby 2.4.1安装Rails 5.0.1.rc1时nokogiri版本兼容问题求助
安装Rails 5.0.1.rc1(Ruby 2.4.1)时的nokogiri版本兼容问题
问题背景
我在最新版Linux Mint Cinnamon上用RVM成功安装了Ruby 2.4.1.p111,要安装一个2017年的Rails项目要求的Rails 5.0.1.rc1,操作过程中遇到nokogiri版本冲突:
- 先执行
sudo apt-get install nodejs - 全局gemset执行
gem install -V rails --version=5.0.1.rc1,遇到racc不兼容,通过gem install racc -v 1.5.2解决 - 再次安装Rails时,提示nokogiri需要Ruby>=2.7,建议安装1.10.10,但安装后仍报错,说找不到兼容的nokogiri ~>1.14版本
- 创建专属gemset
rvm gemset create rails501并切换后安装,问题依旧
当前2.4.1@rails501 gemset的本地gem列表:
gem query --local *** LOCAL GEMS *** activesupport (5.1.0) bigdecimal (default: 1.3.0) bundler (default: 1.17.3) bundler-unload (1.0.2) concurrent-ruby (1.2.2) did_you_mean (1.1.0) executable-hooks (1.6.1) gem-wrappers (1.4.0) i18n (0.9.5) io-console (default: 0.4.6) json (default: 2.0.2) mini_portile2 (2.1.0) minitest (5.10.1) net-telnet (0.1.1) nokogiri (1.7.2) openssl (default: 2.0.3) power_assert (0.4.1) psych (default: 2.2.2) racc (1.5.2) rake (12.0.0) rdoc (default: 5.0.0) rubygems-bundler (1.4.5) rvm (1.11.3.9) test-unit (3.2.3) thread_safe (0.3.6) tzinfo (1.2.11) xmlrpc (0.2.1)
解决方案
核心原因
nokogiri从1.11.x开始要求Ruby>=2.5,1.14.x开始要求Ruby>=2.7,而Rails 5.0.1.rc1的依赖声明允许较高版本的nokogiri,导致rubygems尝试拉取不兼容的新版本。需要手动指定兼容Ruby 2.4.1的nokogiri版本。
操作步骤
- 切换到目标gemset:
rvm use 2.4.1@rails501
- 卸载所有已安装的nokogiri版本:
gem uninstall nokogiri -a
- 安装兼容Ruby 2.4.1的最高nokogiri版本(1.10.10):
gem install nokogiri -v 1.10.10
- 再次安装Rails 5.0.1.rc1,此时rubygems会使用已安装的兼容版本:
gem install rails -v 5.0.1.rc1
备选方案(更稳妥)
直接使用项目的Gemfile和Gemfile.lock来安装依赖:
- 克隆项目后进入目录
- 切换到目标gemset:
rvm use 2.4.1@rails501 - 执行bundle安装:
bundle install
这样会严格按照项目锁定的版本安装所有依赖,避免版本冲突。
内容的提问来源于stack exchange,提问作者daveasdf_2
相关产品推荐
相关产品推荐

