M1芯片Mac上RubyMine无法调试Ruby报错排查
报错由两个独立问题共同导致:
- RVM环境配置异常:Ruby 2.7.5对应的gem执行目录未排在PATH变量最前端,可能导致命令调用时命中非预期版本
- 核心兼容性错误:调试依赖
debase的原生扩展文件debase_internals.bundle为x86_64架构编译产物,与M1系列芯片要求的arm64e架构不匹配,通常是此前通过Rosetta模式运行终端编译gem、或编译时未指定目标架构导致。
按顺序操作即可:
1. 修复debase架构不兼容问题
首先确认当前终端运行在原生arm64模式:
- 终端执行
arch,输出结果为arm64为正常状态 - 如果输出为
x86_64/i386,在访达中找到终端应用,右键选择「显示简介」,取消勾选「使用Rosetta打开」,重启终端后再校验
确认架构正确后,清理旧版本异常gem并重新编译安装:
# 切换到目标Ruby版本 rvm use 2.7.5 # 卸载有问题的调试依赖 gem uninstall debase ruby-debug-ide # 清理gem原生扩展编译缓存 gem pristine --all # 指定arm64架构重新编译安装debase gem install debase -v 2.3.7 -- --with-cflags="-arch arm64e" # 安装对应版本的ruby-debug-ide gem install ruby-debug-ide -v 2.3.7
如果项目通过Bundler管理依赖,需要确认Gemfile中两个调试gem的版本和上面安装的版本对齐,再执行bundle install完成项目内依赖安装。
特殊情况处理:如果执行上述命令时出现Ruby本身的架构不兼容报错,说明当前安装的Ruby 2.7.5是x86_64版本,需要先在arm64终端下重新编译Ruby:执行
rvm reinstall 2.7.5 --with-out-ext=fiddle(加参数跳过M1平台不兼容的fiddle扩展编译),重装完成后再执行上面的gem安装步骤。
2. 修复RVM PATH警告
执行以下命令让RVM自动修复shell配置文件:
rvm get stable --auto-dotfiles
执行完成后重启终端,再运行rvm use 2.7.5切换版本,执行echo $PATH检查输出,若首个路径为/Users/你的用户名/.rvm/gems/ruby-2.7.5/bin则说明修复完成。
如果不想更新RVM版本,也可以直接编辑~/.zshrc文件,在文件最末尾添加以下内容:
[[ -s "$HOME/.rvm/scripts/rvm" ]] && source "$HOME/.rvm/scripts/rvm"
保存后执行source ~/.zshrc即可生效。
如果不需要处理这个警告,直接执行以下命令关闭提示即可:
echo 'rvm_silence_path_mismatch_check_flag=1' >> ~/.rvmrc
3. RubyMine配置校验
打开RubyMine设置,进入「Languages & Frameworks > Ruby SDK and Gems」页面,确认当前选中的SDK为RVM管理的arm64版本Ruby 2.7.5,不要选中x86_64架构的Ruby版本。
配置确认后重启RubyMine,即可正常启动调试流程。
内容的提问来源于stack exchange,提问作者Darshan Shah

