Ruby on Rails中安装mysql2 gem失败的问题求助
解决Ruby on Rails环境下
gem install mysql2安装失败问题 环境信息
- Ruby版本:ruby 3.1.3p185 (2022-11-24 revision 1a6b16756e) [x64-mingw-ucrt]
- Rails版本:Rails 7.0.4
- 已安装MySQL社区版,且将
libmysql.dll放置在C:\Ruby31-x64\bin目录下
安装错误详情
执行gem install mysql2时触发原生扩展构建失败,核心错误日志如下:
错误:安装mysql2失败:错误:无法构建gem原生扩展。 当前目录: C:/Ruby31-x64/lib/ruby/gems/3.1.0/gems/mysql2-0.5.4/ext/mysql2 C:/Ruby31-x64/bin/ruby.exe -I C:/Ruby31-x64/lib/ruby/3.1.0 extconf.rb 检查rb_absint_size()... 是 检查rb_absint_singlebit_p()... 是 检查rb_wait_for_single_fd()... 是 检查ruby.h中的rb_enc_interned_str()... 是 *** extconf.rb 执行失败 *** 无法创建Makefile,可能是缺少必要的库和/或头文件。请查看mkmf.log文件获取更多详情,您可能需要配置选项。 C:/Ruby31-x64/lib/ruby/3.1.0/mkmf.rb:1083:in `block in find_library': undefined method `split' for nil:NilClass (NoMethodError) paths = paths.flat_map {|path| path.split(File::PATH_SEPARATOR)} ^^^^^^ from C:/Ruby31-x64/lib/ruby/3.1.0/mkmf.rb:1083:in `each' from C:/Ruby31-x64/lib/ruby/3.1.0/mkmf.rb:1083:in `flat_map' from C:/Ruby31-x64/lib/ruby/3.1.0/mkmf.rb:1083:in `find_library' from extconf.rb:103:in `<main>'
解决方法
指定MySQL安装路径重新安装
执行gem安装命令时,显式指定MySQL的include和lib目录路径(替换为你的实际MySQL安装目录):gem install mysql2 --platform=ruby -- '--with-mysql-dir="C:/Program Files/MySQL/MySQL Server 8.0" --with-mysql-lib="C:/Program Files/MySQL/MySQL Server 8.0/lib" --with-mysql-include="C:/Program Files/MySQL/MySQL Server 8.0/include"'升级mysql2 gem版本
旧版本mysql2(如0.5.4)与Ruby 3.1.x兼容性较差,尝试安装兼容版本:gem install mysql2 -v 0.5.5配置环境变量与文件路径
- 将MySQL的
bin目录(如C:\Program Files\MySQL\MySQL Server 8.0\bin)添加到系统PATH环境变量 - 确保
libmysql.dll同时存在于Ruby的C:\Ruby31-x64\bin目录和MySQL的bin目录中
- 将MySQL的
安装MSYS2编译依赖
打开UCRT64终端(MSYS2),安装必要的编译工具和连接器:pacman -S mingw-w64-ucrt-x86_64-gcc mingw-w64-ucrt-x86_64-mariadb-connector-c安装完成后重新执行
gem install mysql2命令。
内容的提问来源于stack exchange,提问作者Pankaj
相关产品推荐
相关产品推荐

