Ruby on Rails执行rails c时mysql2出现Segmentation fault问题求助
环境信息
- Ruby版本:2.5.8p224 (2020-03-31 revision 67882) [x86_64-linux]
- Rails版本:5.0.7.2
- 触发场景:执行
rails c时触发Segmentation Fault(段错误),错误根源指向mysql2 gem的数据库连接环节
错误日志
home/user/.rvm/gems/ruby-2.5.8/gems/mysql2-0.5.3/lib/mysql2/client.rb:90: [BUG] Segmentation fault at 0x0000000000000000 ruby 2.5.8p224 (2020-03-31 revision 67882) [x86_64-linux] -- Control frame information ----------------------------------------------- c:0044 p:---- s:0331 e:000330 CFUNC :connect c:0043 p:0614 s:0319 e:000318 METHOD /home/user/.rvm/gems/ruby-2.5.8/gems/mysql2-0.5.3/lib/mysql2/client.rb:90 [FINISH] c:0042 p:---- s:0305 e:000304 CFUNC :new c:0041 p:0142 s:0300 e:000299 METHOD /home/user/.rvm/gems/ruby-2.5.8/gems/activerecord-5.0.7.2/lib/active_record/connection_adapters/mysql2_adapter.rb:25 c:0040 p:0024 s:0293 e:000292 METHOD /home/user/.rvm/gems/ruby-2.5.8/gems/activerecord-5.0.7.2/lib/active_record/connection_adapters/abstract/connection_pool.rb:729 c:0039 p:0021 s:0289 e:000288 METHOD /home/user/.rvm/gems/ruby-2.5.8/gems/activerecord-5.0.7.2/lib/active_record/connection_adapters/abstract/connection_pool.rb:773 c:0038 p:0016 s:0285 e:000284 METHOD /home/user/.rvm/gems/ruby-2.5.8/gems/activerecord-5.0.7.2/lib/active_record/connection_adapters/abstract/connection_pool.rb:752 c:0037 p:0014 s:0279 e:000278 METHOD /home/user/.rvm/gems/ruby-2.5.8/gems/activerecord-5.0.7.2/lib/active_record/connection_adapters/abstract/connection_pool.rb:713 c:0036 p:0012 s:0273 e:000271 METHOD /home/user/.rvm/gems/ruby-2.5.8/gems/activerecord-5.0.7.2/lib/active_record/connection_adapters/abstract/connection_pool.rb:490 c:0035 p:0031 s:0267 e:000263 METHOD /home/user/.rvm/gems/ruby-2.5.8/gems/activerecord-5.0.7.2/lib/active_record/connection_adapters/abstract/connection_pool.rb:364 c:0034 p:0046 s:0260 e:000259 METHOD /home/user/.rvm/gems/ruby-2.5.8/gems/activerecord-5.0.7.2/lib/active_record/connection_adapters/abstract/connection_pool.rb:883 c:0033 p:0011 s:0253 e:000252 METHOD /home/user/.rvm/gems/ruby-2.5.8/gems/activerecord-5.0.7.2/lib/active_record/connection_handling.rb:128 c:0032 p:0004 s:0249 e:000248 METHOD /home/user/.rvm/gems/ruby-2.5.8/gems/activerecord-5.0.7.2/lib/active_record/connection_handling.rb:91 c:0031 p:0012 s:0245 e:000244 METHOD /home/user/.rvm/gems/ruby-2.5.8/gems/activerecord-5.0.7.2/lib/active_record/migration.rb:559 [NOTE] You may have encountered a bug in the Ruby interpreter or extension libraries. Bug reports are welcome. For details: http://www.ruby-lang.org/bugreport.html Aborted (core dumped)
解决思路
重新编译mysql2 gem:段错误多因C扩展编译不兼容导致,卸载后重新安装并指定系统mysql配置路径:
gem uninstall mysql2 gem install mysql2 -v 0.5.3 -- --with-mysql-config=$(which mysql_config)调整mysql2版本:尝试切换mysql2的兼容版本,比如降级到0.5.2或升级到0.5.4,修改Gemfile后执行:
bundle update mysql2验证系统MySQL库兼容性:检查系统安装的MySQL/MariaDB版本与mysql2 gem是否匹配,若版本差异过大,升级或降级系统MySQL库。
重置RVM环境:RVM管理的Ruby可能存在环境冲突,重新加载或重装Ruby:
rvm reload rvm use 2.5.8 --default # 若无效则重装Ruby rvm uninstall 2.5.8 rvm install 2.5.8排查数据库连接配置:启动不连接数据库的控制台,确认是否为配置问题:
rails c --skip-active-record若能正常启动,检查
config/database.yml中的主机、端口、账号密码是否正确,并用mysql命令行测试连接:mysql -h [数据库主机] -u [用户名] -p [数据库名]分析Core Dump文件:若系统生成core dump,用gdb定位具体错误点:
gdb ruby core bt # 查看调用栈详情
内容的提问来源于stack exchange,提问作者NehaNH
相关产品推荐
相关产品推荐

