Closed martingregoire closed 4 years ago
It turned out that this was caused by the used OpenSSL library.
We compiled Ruby 2.3.3 on the host (because there was no precompiled version available for this machine). Before that, we installed the openssl
package (this was needed back then when we installed Ruby 2.3.3):
$ rvm pkg install openssl
$ rvm install 2.3.3 --with-zlib-dir=HOME/.rvm/usr --with-openssl-dir=HOME/.rvm/usr --with-readline-dir=HOME/.rvm/usr
This version of openssl (openssl-1.0.1i
) apparently does not work with libmysqlclient.so.20.3.15
.
To fix this, we re-compiled Ruby by doing this (note: we omit the --with-openssl-dir
stuff, and have updated to Ruby 2.6.5 some time ago):
$ rvm reinstall 2.6.5 --with-zlib-dir=HOME/.rvm/usr --with-readline-dir=HOME/.rvm/usr
After that we re-built all gems:
$ bundle pristine
Now mysql2
works again without segmentation faults.
We're using
mysql2
for a Rails (version 5.2.3) project hosted on a Linux server. The hoster recently updated MySQL to version 5.7.28 (previously 5.7.27 was used).Since this upgrade every Ruby thread using the
mysql2
gem crashes with a segmentation fault.The hoster acknowledged this problem, and found that the used library
libmysqlclient.so
seems to be causing this problem.Before the update,
libmysqlclient.so.20.3.13
was used; after the update,libmysqlclient.so.20.3.15
was used.We already tried to rebuild
mysql2
on the host, but this did not resolve the issue.The hoster as a workaround symlinked the older library, which for now seems to work.
Environment
Stack trace
This project uses Bundler for gem managment, and Capistrano for deployments.
Please note that I replaced the home directory by
HOME
, the gemset byGEMSET
, and the application directory byAPP
.Please click to extend.
``` $ bundle exec rails c -e staging HOME/.rvm/gems/ruby-2.6.5@GEMSET/gems/mysql2-0.5.2/lib/mysql2/mysql2.so: [BUG] Segmentation fault at 0x0000000000000000 ruby 2.6.5p114 (2019-10-01 revision 67812) [x86_64-linux] -- Control frame information ----------------------------------------------- c:0024 p:-11761932604808 s:0129 e:000128 TOP [FINISH] c:0023 p:---- s:0126 e:000125 CFUNC :require c:0022 p:0246 s:0121 e:000120 TOP HOME/.rvm/gems/ruby-2.6.5@GEMSET/gems/mysql2-0.5.2/lib/mysql2.rb:33 [FINISH] c:0021 p:---- s:0117 e:000116 CFUNC :require c:0020 p:0033 s:0112 e:000111 BLOCK HOME/.rvm/rubies/ruby-2.6.5/lib/ruby/site_ruby/2.6.0/bundler/runtime.rb:81 [FINISH] c:0019 p:---- s:0107 e:000106 CFUNC :each c:0018 p:0050 s:0103 e:000102 BLOCK HOME/.rvm/rubies/ruby-2.6.5/lib/ruby/site_ruby/2.6.0/bundler/runtime.rb:76 [FINISH] c:0017 p:---- s:0096 e:000095 CFUNC :each c:0016 p:0030 s:0092 e:000091 METHOD HOME/.rvm/rubies/ruby-2.6.5/lib/ruby/site_ruby/2.6.0/bundler/runtime.rb:65 c:0015 p:0015 s:0087 e:000086 METHOD HOME/.rvm/rubies/ruby-2.6.5/lib/ruby/site_ruby/2.6.0/bundler.rb:114 c:0014 p:0036 s:0082 e:000081 TOP HOME/APP/config/application.rb:7 [FINISH] c:0013 p:---- s:0079 e:000078 CFUNC :require c:0012 p:0037 s:0074 e:000073 METHOD HOME/.rvm/gems/ruby-2.6.5@GEMSET/gems/railties-5.2.3/lib/rails/command/actions.rb:22 c:0011 p:0004 s:0070 e:000069 METHOD HOME/.rvm/gems/ruby-2.6.5@GEMSET/gems/railties-5.2.3/lib/rails/command/actions.rb:14 c:0010 p:0031 s:0066 e:000065 METHOD HOME/.rvm/gems/ruby-2.6.5@GEMSET/gems/railties-5.2.3/lib/rails/commands/console/console_command.rb:95 c:0009 p:0064 s:0062 e:000061 METHOD HOME/.rvm/gems/ruby-2.6.5@GEMSET/gems/thor-0.19.4/lib/thor/command.rb:27 c:0008 p:0047 s:0054 e:000053 METHOD HOME/.rvm/gems/ruby-2.6.5@GEMSET/gems/thor-0.19.4/lib/thor/invocation.rb:126 c:0007 p:0259 s:0047 e:000046 METHOD HOME/.rvm/gems/ruby-2.6.5@GEMSET/gems/thor-0.19.4/lib/thor.rb:369 c:0006 p:0043 s:0034 e:000033 METHOD HOME/.rvm/gems/ruby-2.6.5@GEMSET/gems/railties-5.2.3/lib/rails/command/base.rb:65 c:0005 p:0130 s:0027 e:000026 METHOD HOME/.rvm/gems/ruby-2.6.5@GEMSET/gems/railties-5.2.3/lib/rails/command.rb:46 c:0004 p:0059 s:0016 e:000015 TOP HOME/.rvm/gems/ruby-2.6.5@GEMSET/gems/railties-5.2.3/lib/rails/commands.rb:18 [FINISH] c:0003 p:---- s:0011 e:000010 CFUNC :require c:0002 p:0033 s:0006 e:000005 EVAL bin/rails:4 [FINISH] c:0001 p:0000 s:0003 E:000e40 (none) [FINISH] -- Ruby level backtrace information ---------------------------------------- bin/rails:4:in `