Alpine 3.13环境Ruby2.7.5安装racc v1.6.0 gem原生扩展编译失败
问题原因
这个报错和racc gem本身没有关系,是Alpine 3.13环境缺少编译Ruby原生C扩展的必要组件:默认的精简Alpine镜像不会预装gcc、make等编译工具,也不会带对应Ruby版本的开发头文件,导致mkmf连最基础的编译测试程序都无法生成,所有需要编译原生扩展的gem安装、更新操作都会触发完全一致的错误。
从贴出的mkmf.log也能看出来,失败点就是直接调用gcc编译测试C程序的环节,还没到检测rb_block_call函数的步骤就已经中断。
修复操作
- 先安装缺失的系统依赖,执行apk命令:
apk add --no-cache build-base ruby-dev
两个包的作用:
build-base是Alpine的基础编译工具集元包,会自动装上gcc、g++、make、musl-libc开发文件等所有基础编译组件,正好对应报错里提示的"You have to install development tools first"ruby-dev包含当前Ruby 2.7版本对应的开发头文件(比如编译扩展必须的ruby.h)- 如果之前安装racc失败留下了不完整的残留文件,可以先执行清理:
gem uninstall racc -v 1.6.0
- 之后重新执行安装/更新操作即可:
# 单独安装指定版本racc gem install racc -v 1.6.0 # 用Bundler管理项目依赖的话,直接执行对应命令即可 bundle install # 或 bundle update
校验方法
依赖安装完成后,可以先执行gcc --version确认编译器正常可用,再尝试安装任意带原生扩展的gem(比如gem install json),如果能正常走完编译流程,说明环境已经修复,后续安装其他gem也不会再触发同类错误。
内容的提问来源于stack exchange,提问作者Caio Nakai
相关产品推荐
相关产品推荐

