Ubuntu环境下安装nokogiri 1.8.2失败及Gem::Command报错求助
问题描述
NameError: uninitialized constant Gem::Command Gem::Command.build_args ^^^^^^^^^ 安装nokogiri (1.8.2)时出错,Bundler无法继续。 请确保`gem install nokogiri -v '1.8.2'`安装成功后再执行bundling。
已尝试操作
gem install nokogiri -v '1.8.2'sudo apt-get install build-essential patch ruby-dev zlib1g-dev liblzma-devapt-get install openssl ruby-openssl libssl-devgem install nokogiri -- --use-system-librariesgem install nokogiri -- --with-xml2-config=/path/to/xml2-configgem install nokogiri -- --with-xslt-config=/path/to/xslt-configbundle config build.nokogiri --use-system-libraries(执行后出现上述新报错,此前为其他安装错误,本质均为nokogiri安装失败)
当前环境
- 操作系统:Ubuntu 22.04.1 LTS
- Ruby版本:ruby 3.1.3p185 (2022-11-24 revision 1a6b16756e) [x86_64-linux](RVM安装)
- Rails版本:Rails 7.0.4
解决方案
核心原因
nokogiri 1.8.2是2018年的旧版本,不兼容Ruby 3.1.x,Gem::Command报错正是因为旧版本nokogiri调用了RubyGems中已被移除或重构的API。
步骤1:降级Ruby到兼容版本
nokogiri 1.8.2的兼容Ruby版本范围是Ruby 2.2至Ruby 2.6,用RVM安装对应稳定版:
# 安装Ruby 2.6.9(最后一个2.6系列稳定版) rvm install 2.6.9 # 切换到该版本 rvm use 2.6.9 # 设置为项目默认版本 rvm use 2.6.9 --default
步骤2:清理残留配置并重新安装
- 清除之前的nokogiri编译配置和残留安装包:
bundle config unset build.nokogiri gem uninstall nokogiri -x
- 重新安装系统依赖:
sudo apt-get update sudo apt-get install build-essential patch ruby-dev zlib1g-dev liblzma-dev libxml2-dev libxslt1-dev
- 安装nokogiri 1.8.2:
gem install nokogiri -v '1.8.2' -- --use-system-libraries
- 执行bundle安装:
bundle install
替代方案:升级nokogiri版本(若项目允许)
如果项目代码兼容更高版本nokogiri,建议将Gemfile中的nokogiri版本改为~> 1.13.0或更高(该版本支持Ruby 3.1),然后执行:
bundle update nokogiri
内容的提问来源于stack exchange,提问作者zero
相关产品推荐
相关产品推荐

