Ubuntu 22下Docker容器MySQL5.7连接mysql2 0.5.4 gem遇阻求助
解决mysql2 Ruby gem安装报错的可行方案
以下是针对Ubuntu 22系统、MySQL 5.7部署在Docker容器场景下,安装mysql2 gem时出现checking for rb_enc_interned_str() in ruby.h... no报错的解决方法:
1. 安装主机端必要的开发依赖
mysql2 gem编译依赖主机的Ruby开发头文件和MySQL客户端库(与Docker内的MySQL服务无关),执行以下命令安装:
- 安装Ruby开发包:
sudo apt-get update && sudo apt-get install ruby-dev - 安装MySQL客户端开发库:
sudo apt-get install libmysqlclient-dev
2. 匹配mysql2版本与Ruby版本
Ubuntu 22默认Ruby版本为3.0.x,而mysql2 0.4.x及更早版本不支持Ruby 3.x(rb_enc_interned_str()是Ruby 2.7+引入的函数,旧版mysql2未适配),需安装兼容版本:
- 直接安装指定版本:
gem install mysql2 -v '0.5.5' - 若使用Bundler,在Gemfile中指定兼容版本后执行安装:
# Gemfile中添加 gem 'mysql2', '~> 0.5.5'bundle install
3. 手动指定Ruby头文件路径(可选)
若系统未自动识别Ruby头文件路径,可手动指定:
- 查找ruby.h所在目录:
通常路径类似find /usr -name ruby.h/usr/include/ruby-3.0.0/x86_64-linux/ - 安装时指定include路径:
gem install mysql2 -- --with-ruby-include=/path/to/ruby/include/dir
注意事项
mysql2 gem编译仅依赖主机本地的开发库,运行时通过网络连接Docker内的MySQL服务即可,无需指向容器内的文件路径。
内容的提问来源于stack exchange,提问作者MW_DEVEL
相关产品推荐
相关产品推荐

