Ubuntu 20.04安装mysql2 0.3.21 gem时构建原生扩展失败如何解决?
报错根因
本次编译失败是因为 mysql2 0.3.21 属于较早版本,不兼容 Ubuntu 20.04 系统默认预装的 MySQL 8.0 客户端开发库:MySQL 8.0 正式移除了旧版本定义的 my_bool 类型和 MYSQL_SECURE_AUTH 宏,和你部署的 MySQL 5.7 服务端版本无关。
解决方案
方案1:编译时传入适配参数(优先推荐,无需修改系统依赖)
直接在安装gem时通过编译参数手动补全缺失的定义即可完成安装,不会修改系统现有依赖:
gem install mysql2 -v '0.3.21' -- --with-cflags="-DMYSQL_SECURE_AUTH=MYSQL_DEFAULT_AUTH -Dmy_bool=bool"
如果是通过 bundler 安装,执行以下命令配置后再执行 bundle install 即可:
bundle config set --local build.mysql2 "--with-cflags='-DMYSQL_SECURE_AUTH=MYSQL_DEFAULT_AUTH -Dmy_bool=bool'"
方案2:替换系统MySQL开发库为5.7版本
如果不想每次安装都加参数,可以将本地的MySQL客户端开发库降级为5.7版本:
- 先卸载现有8.0版本的开发包
sudo apt remove -y libmysqlclient-dev default-libmysqlclient-dev sudo apt autoremove -y
- 配置MySQL 5.7的官方APT源,安装时版本选择5.7系列
- 更新源后安装5.7版本的开发包
sudo apt install -y libmysqlclient-dev=5.7.*
- 正常安装对应版本gem即可
gem install mysql2 -v '0.3.21'
方案3:升级mysql2版本(如果项目兼容)
如果你的项目对mysql2版本没有强制要求,可以升级到0.4.10及以上版本,这些版本已经原生适配MySQL 8.0客户端库:
gem install mysql2 -v '0.4.10'
内容的提问来源于stack exchange,提问作者user447141
相关产品推荐
相关产品推荐

