Ruby on Rails操作MySQL触发mysql2 gem段错误,求解决方案
环境信息
- Ruby版本:3.0.4p208
- Rails版本:7.0.4
- 环境管理:rvm
- 操作系统:Ubuntu 22.04.1 LTS
- MySQL版本:Ver 8.0.31-0ubuntu0.22.04.1 for Linux on x86_64
问题现象
执行MySQL数据库创建、初始化等操作时触发段错误(Segmentation fault),程序终止并输出Aborted (core dumped)。
错误日志片段
Top level ::CompositeIO is deprecated, require 'multipart/post' and use `Multipart::Post::CompositeReadIO` instead! Top level ::Parts is deprecated, require 'multipart/post' and use `Multipart::Post::Parts` instead! W, [2023-01-12T12:59:10.830314 #125121] WARN -- Skylight: [SKYLIGHT] [5.3.4] Running Skylight in development mode. No data will be reported until you deploy your app. (To disable this message for all local apps, run `skylight disable_dev_warning`.) /External-drive/Personal/Projects/breakabletoy/vendor/bundle/ruby/3.0.0/gems/mysql2-0.5.4/lib/mysql2/client.rb:95: [BUG] Segmentation fault at 0x0000000000000000 ruby 3.0.4p208 (2022-04-12 revision 3fa771dded) [x86_64-linux] -- Control frame information ----------------------------------------------- c:0049 p:---- s:0274 e:000273 CFUNC :connect c:0048 p:0623 s:0262 e:000261 METHOD /External-drive/Personal/Projects/breakabletoy/vendor/bundle/ruby/3.0.0/gems/mysql2-0.5.4/lib/mysql2/client.rb:95 [FINISH]
错误末尾内存映射信息:
7f91e72b2000-7f91e72dc000 r-xp 00002000 103:02 31066233 /usr/lib/x86_64-linux-gnu/ld-linux-x86-64.so.2 7f91e72dc000-7f91e72e7000 r--p 0002c000 103:02 31066233 /usr/lib/x86_64-linux-gnu/ld-linux-x86-64.so.2 7f91e72e7000-7f91e72e8000 r-xp 00000000 00:00 0 7f91e72e8000-7f91e72ea000 r--p 00037000 103:02 31066233 /usr/lib/x86_64-linux-gnu/ld-linux-x86-64.so.2 7f91e72ea000-7f91e72ec000 rw-p 00039000 103:02 31066233 /usr/lib/x86_64-linux-gnu/ld-linux-x86-64.so.2 7ffedcfb9000-7ffedd7b8000 rw-p 00000000 00:00 0 [stack] 7ffedd7bc000-7ffedd7c0000 r--p 00000000 00:00 0 [vvar] 7ffedd7c0000-7ffedd7c2000 r-xp 00000000 00:00 0 [vdso] ffffffffff600000-ffffffffff601000 --xp 00000000 00:00 0 [vsyscall] Aborted (core dumped)
已尝试的操作
- 尝试安装
libmariadbclient-dev,但系统提示找不到该包 - 安装mysql2官方文档要求的所有依赖
- 卸载并重装rvm
解决方案
1. 安装正确的MySQL开发依赖
Ubuntu 22.04中libmariadbclient-dev已被替换,执行以下命令安装适配的依赖:
sudo apt update sudo apt install libmysqlclient-dev
2. 重新编译mysql2 gem
卸载现有版本后,指定系统MySQL配置路径重新编译安装:
gem uninstall mysql2 bundle config build.mysql2 --with-mysql-config=/usr/bin/mysql_config bundle install
3. 升级mysql2 gem版本
mysql2 0.5.4与Ruby 3.0.x存在兼容性问题,升级至最新稳定版:
# 修改Gemfile中的mysql2版本约束,例如: # gem 'mysql2', '~> 0.5.5' bundle update mysql2
4. 重置rvm gemset
清理当前gemset的冲突依赖:
rvm gemset empty bundle install
5. 验证连接有效性
创建测试脚本确认MySQL连接正常:
# test_mysql.rb require 'mysql2' client = Mysql2::Client.new( host: 'localhost', username: 'your_db_user', password: 'your_db_password', database: 'your_db_name' ) puts "Connection successful!" client.close
运行脚本:
ruby test_mysql.rb
内容的提问来源于stack exchange,提问作者broiling-clamshell
相关产品推荐
相关产品推荐

