Ubuntu下Ruby2.7.2安装Rails报gem原生扩展构建失败错误求助
Ubuntu系统Ruby 2.7.2环境Rails安装报错解决(gem原生扩展构建失败)
报错本质说明
ERROR: Failed to build gem native extension是Ruby gem安装阶段的通用类报错,核心原因是当前系统缺少C/C++编译基础环境、或是目标gem依赖的系统级开发库,导致gem自带的C扩展代码无法完成编译,并非Rails框架本身的代码逻辑错误。
分步排查与操作
- 首先安装系统基础编译工具链
先执行本地软件源列表更新:sudo apt update
安装编译必需的基础工具集:sudo apt install build-essential
该工具集会自动安装gcc、g++、make等编译C/C++代码必备的基础组件,是所有原生扩展编译的前置条件。 - 安装Rails生态核心依赖的系统开发库
Rails安装过程中会连带安装多个依赖原生扩展的gem,对应需要预装的系统库执行以下命令统一安装:sudo apt install libsqlite3-dev libxslt1-dev libxml2-dev libssl-dev zlib1g-dev libcurl4-openssl-dev libffi-dev libsass-dev
覆盖的依赖对应sqlite3驱动、nokogiri解析库、openssl加密库、curl请求库、ffi通用外部函数接口、sassc样式编译库的全部编译依赖。 - 适配Ruby 2.7.2的编译参数调整
由于Ruby 2.7.2发布时适配的是早期版本的gcc编译器,在新版本Ubuntu的gcc环境下,部分旧gem的编译会因为“隐式函数声明”的严格校验直接中断,安装Rails时追加编译参数即可规避:gem install rails -- --with-cflags="-Wno-error=implicit-function-declaration"
该参数不会影响代码运行安全性,仅用于跳过旧版本代码在新编译器下的非阻断告警 - 特殊场景补位排查
- 如果使用rbenv管理Ruby版本,安装完成后执行
rbenv rehash刷新命令路径缓存,避免因为路径指向异常导致的编译中断 - 如果之前有过失败安装的残留缓存,执行
gem cleanup清理失效的gem安装包与临时文件后重试 - 如果详细报错日志明确指向某一个特定gem(而非通用的编译工具缺失),针对该gem单独查询所需的系统依赖补装即可,无需全量重装。
- 如果使用rbenv管理Ruby版本,安装完成后执行
内容的提问来源于stack exchange,提问作者Payal Gugle
相关产品推荐
相关产品推荐

