Ubuntu22.04下Rails6+Ruby2.6.6启动服务触发Segmentation fault求助
解决Ruby 2.6.6 + Rails 6在Ubuntu 22.04上的Segmentation Fault错误
针对你遇到的listen gem触发Ruby段错误问题,提供以下几种可行解决方案:
升级listen gem版本
错误出在listen-3.2.1,该版本与Ruby 2.6.6在Ubuntu 22.04的新glibc环境下存在兼容问题。修改项目的Gemfile,指定更高版本的listen:gem 'listen', '~> 3.7.0'执行
bundle update listen更新依赖后,重启Rails服务。重新编译Ruby并添加兼容参数
Ubuntu 22.04搭载的glibc 2.34对老版本Ruby支持不佳,通过RVM重新编译Ruby时添加兼容选项:rvm reinstall 2.6.6 --with-openssl-dir=/usr/lib/ssl --with-glibc-version=2.31(若使用rbenv,可在编译前设置
export CFLAGS="-D_GLIBCXX_USE_CXX11_ABI=0",再重新安装Ruby 2.6.6)临时禁用文件监听
若只是临时测试服务,可启动Rails时关闭监听功能:rails s --no-listener或者在
config/environments/development.rb中配置:config.file_watcher = nil
问题原因
Ubuntu 22.04使用的glibc 2.34版本较新,而Ruby 2.6.6是2020年发布的旧版本,未针对该glibc版本做适配;旧版本listen gem在调用文件系统相关方法时,触发了内存访问错误,导致Ruby进程段错误崩溃。
内容的提问来源于stack exchange,提问作者Muhammad Raihan
相关产品推荐
相关产品推荐

