You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Ubuntu16.04下Ruby2.3.1+Rails5.1.4的gem扩展未构建及json安装报错问题

解决Ubuntu 16.04下Ruby 2.3.1 + Rails 5.1.4的gem扩展构建与json安装失败问题

嘿,我来帮你搞定Ubuntu 16.04上装Ruby 2.3.1和Rails 5.1.4时碰到的这些gem问题——不管是nokogiri、bindex这类扩展没构建的提示,还是后来json 1.8.6装失败的报错,本质都是系统依赖缺失或者gem缓存损坏导致的,一步步来解决:

一、先搞定那些“扩展未构建”的gem

系统提示的gem pristine [gem名] --version [版本号]确实是修复缓存损坏gem的好办法,但先别急着执行,得先把Ubuntu上编译Ruby扩展需要的基础依赖装上,不然还是会失败:

  1. 安装基础编译工具和Ruby开发依赖:
sudo apt-get update
sudo apt-get install build-essential patch ruby-dev zlib1g-dev liblzma-dev
  1. 针对nokogiri,它还需要额外的XML处理依赖,得单独装:
sudo apt-get install libxml2-dev libxslt1-dev
  1. 现在再逐个修复提示的gem,比如:
gem pristine nokogiri --version 1.8.1
gem pristine bindex --version 0.5.0

要是记不全所有报错的gem也没关系,先处理下面的json问题,后面bundle install时再针对性修复就行。

二、解决json 1.8.6安装失败的核心问题

json 1.8.6在Ruby 2.3.x和Ubuntu 16.04上装失败,大多是因为高版本gcc的编译规则和旧版json源码不兼容,加上可能缺了依赖,按下面步骤来:

  1. 先装json需要的数学库依赖:
sudo apt-get install libgmp-dev
  1. 用指定编译参数安装json 1.8.6,跳过gcc的隐式函数声明错误:
gem install json -v '1.8.6' -- --with-cflags="-Wno-error=implicit-function-declaration"

这个--with-cflags参数很关键,因为Ubuntu 16.04的gcc会把某些旧代码里的隐式函数声明当成错误,而json 1.8.6的源码没适配这个规则,加上这个参数就能绕过去。

  1. 装完json后,回到你的Rails应用目录,重新跑:
bundle install

三、额外的小提醒

  • 如果你用rvm或者rbenv管理Ruby版本,先确认当前shell加载的是Ruby 2.3.1(输ruby -v看看版本对不对),别搞错环境了。
  • 要是还是装不上,试试清掉gem缓存再重新来:
gem cleanup
rm -rf ~/.gem/ruby/2.3.1/cache/json-1.8.6.gem

然后再重新执行安装json的命令。

内容的提问来源于stack exchange,提问作者Dhinakaran

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.15 03:49:00