Rails 5.1.6使用mysql2迁移数据库时遇NameError错误求助
解决Rails 5.1.6 + mysql2 gem执行
rake db:migrate时的NameError: uninitialized constant mysql2::Client::found_rows错误 这个错误本质是mysql2 gem版本和Rails 5.1.6不兼容导致的——mysql2 0.6.x及以上版本移除了found_rows这个常量,但Rails 5.1.6的代码还在尝试引用它。下面是一步步的解决方法:
方法一:锁定兼容的mysql2版本
打开项目根目录下的
Gemfile,找到mysql2的配置行,把它修改为兼容Rails 5.1.6的版本:gem 'mysql2', '~> 0.5.3'(如果0.5.x还是有问题,可以尝试更低的
~> 0.4.13版本,这个版本和Rails 5.1.x适配性很好)执行bundle命令更新依赖:
bundle install重新执行迁移命令:
rake db:migrate # 或者Rails 5+推荐用: rails db:migrate
方法二:解决XAMPP环境下mysql2编译路径问题(如果方法一无效)
因为你用的是XAMPP的MySQL环境,有时候bundle安装mysql2时会找不到mysql的配置文件,导致native扩展编译不完全,也可能触发这类错误。可以手动指定mysql_config的路径:
先找到XAMPP中mysql_config的位置:
- Mac系统通常是:
/Applications/XAMPP/xamppfiles/bin/mysql_config - Windows系统通常是:
C:\xampp\mysql\bin\mysql_config.exe - Linux系统可能是:
/opt/lampp/bin/mysql_config
- Mac系统通常是:
配置bundle指向这个路径,然后重新安装:
# Mac/Linux bundle config set mysql2 --with-mysql-config=/Applications/XAMPP/xamppfiles/bin/mysql_config bundle install # Windows(命令行需以管理员身份运行) bundle config set mysql2 --with-mysql-config=C:\xampp\mysql\bin\mysql_config.exe bundle install再次尝试执行迁移命令。
额外检查点
- 确保XAMPP的MySQL服务已经启动(打开XAMPP控制面板,确认MySQL模块是Running状态)
- 如果之前安装过高版本的mysql2,建议先清理旧的gem:
gem uninstall mysql2,然后再执行bundle install
内容的提问来源于stack exchange,提问作者collins omondi
相关产品推荐
相关产品推荐

