Rails执行rails db:create报错:LoadError: cannot load such file -- mysql2/mysql2
Rails执行
rails db:create时mysql2加载失败的解决方法 问题背景
基于Rails 5.0.2、Ruby 2.5.8开发应用,使用mysql2 0.4.10,已安装MySQL 8稳定版(macOS Monterey 12),执行rails db:create时抛出如下错误:
rails aborted! LoadError: cannot load such file -- mysql2/mysql2 /.rvm/gems/ruby-2.5.8/gems/mysql2-0.4.10/lib/mysql2.rb:31:in `require' /.rvm/gems/ruby-2.5.8/gems/mysql2-0.4.10/lib/mysql2.rb:31:in `<top (required)>' /config/application.rb:7:in `<top (required)>' /Rakefile:5:in `require' /Rakefile:5:in `<top (required)>' /.rvm/gems/ruby-2.5.8/gems/railties-5.0.2/lib/rails/commands/rake_proxy.rb:13:in `block in run_rake_task' /.rvm/gems/ruby-2.5.8/gems/railties-5.0.2/lib/rails/commands/rake_proxy.rb:11:in `run_rake_task' /.rvm/gems/ruby-2.5.8/gems/railties-5.0.2/lib/rails/commands/commands_tasks.rb:51:in `run_command!' /.rvm/gems/ruby-2.5.8/gems/railties-5.0.2/lib/rails/commands.rb:18:in `<top (required)>' script/rails:6:in `require' script/rails:6:in `<main>'
解决步骤
这个问题主要是mysql2 0.4.10与MySQL 8的兼容性、库路径不匹配导致的,按以下操作逐一排查:
1. 卸载现有mysql2 gem
先彻底移除当前安装的mysql2版本:
gem uninstall mysql2
提示选择版本时,选中0.4.10卸载。
2. 指定MySQL路径重新安装mysql2
mysql2 0.4.10需要手动指定MySQL 8的库和配置路径才能正常编译,执行以下命令:
gem install mysql2 -v 0.4.10 -- --with-mysql-config=/usr/local/mysql/bin/mysql_config --with-ldflags=-L/usr/local/mysql/lib --with-cppflags=-I/usr/local/mysql/include
- 如果你用Homebrew安装MySQL,Intel芯片路径是
/usr/local/bin/mysql_config,Apple Silicon芯片是/opt/homebrew/bin/mysql_config,根据自己的芯片类型替换路径。
3. 修正database.yml配置
确保config/database.yml适配MySQL 8的认证方式,参考配置如下:
default: &default adapter: mysql2 encoding: utf8mb4 pool: <%= ENV.fetch("RAILS_MAX_THREADS") { 5 } %> username: root password: 你的MySQL密码 host: localhost socket: /tmp/mysql.sock development: <<: *default database: 你的应用名_development test: <<: *default database: 你的应用名_test
4. 重新绑定依赖并创建数据库
回到项目目录,执行:
bundle install rails db:create
5. RVM环境检查(如果用RVM管理Ruby)
确认当前使用的Ruby版本和gemset正确:
rvm use ruby-2.5.8@你的应用gemset名 --create
重复步骤2和4重新安装依赖。
内容的提问来源于stack exchange,提问作者arslan ahmad
相关产品推荐
相关产品推荐

