Mac M2设备上Rails 5.1.7服务器访问时触发Bus Error崩溃求助
Mac M2设备上Rails 5.1.7服务器访问时触发Bus Error崩溃求助
问题背景
我在M2芯片的Mac上部署Rails 5.1.7应用已经卡了好几个月,折腾了各种配置还是卡在服务器访问这一步,想请教下有没有遇过类似问题的朋友能给点思路?目前的环境和问题细节如下:
- 已安装Rosetta,终端设置为Rosetta模式运行(
arch命令返回i386),使用x86版本的Homebrew,已安装postgresql@14、openssl@3等核心依赖 bundle install完全正常,rails console、rails db:*系列命令能正常执行,甚至在console里跑ActiveRecord查询也没任何问题rails server能正常启动,但只要在浏览器访问localhost:3000,就会直接触发Bus Error崩溃,错误日志如下:
Started GET "/" for ::1 at 2025-07-12 22:54:20 +1000
/Users/jkv-mbp/.gem/ruby/2.6.6/gems/pg-0.21.0/lib/pg.rb:56: [BUG] Bus Error at 0x0000000109946aac
ruby 2.6.6p146 (2020-03-31 revision 67876) [x86_64-darwin24]-- Crash Report log information --------------------------------------------
See Crash Report log file under the one of following:
- ~/Library/Logs/DiagnosticReports
- /Library/Logs/DiagnosticReports
for more details. Don't forget to include the above Crash Report log file in bug reports.
- 试过在Asahi Linux(M2的aarch64版本)上部署,应用完全正常运行,但这个方案对我的日常工作流来说太不方便,还是想搞定Mac原生环境。
解决方案与排查思路
结合你的情况,问题核心基本是老版本的pg gem、Ruby与M2+Darwin 24(Sonoma)在Rosetta模式下的兼容性冲突,给你几个优先级从高到低的尝试方向:
- 优先升级pg gem版本
你当前用的pg 0.21.0是2018年的老版本,对新系统的兼容性极差,这几乎是90%概率的问题根源。Rails 5.1.7兼容pg 1.0~1.4.x版本,操作步骤:
- 修改Gemfile:把
gem 'pg', '0.21.0'改成gem 'pg', '~> 1.4' - 卸载旧版本pg gem:
gem uninstall pg -v 0.21.0 - 重新执行
bundle install,确保安装过程中是基于x86的postgresql@14编译的
- 修复Ruby 2.6.6的编译兼容性
Ruby 2.6.6的默认编译参数可能不兼容Darwin 24的新库,建议重新编译Ruby,指定用brew的openssl@3:
# 先确保切换到x86的终端环境 arch -x86_64 zsh # 重新编译Ruby 2.6.6 RUBY_CONFIGURE_OPTS="--with-openssl-dir=$(brew --prefix openssl@3)" ruby-install ruby 2.6.6 # 切换到新编译的Ruby版本 chruby ruby-2.6.6
也可以尝试升级到Ruby 2.6.x的最新补丁版本2.6.10,它修复了很多系统兼容性bug。
- 验证pg扩展的架构一致性
确保pg gem的C扩展是纯x86架构,没有混用arm64库:
- 检查架构:
file $(bundle show pg)/lib/pg_ext.bundle,输出应该包含x86_64 - 如果不是,指定pg_config路径重新安装:
gem install pg -v 1.4.0 -- --with-pg-config=$(brew --prefix postgresql@14)/bin/pg_config
- 临时调整系统安全设置(谨慎操作)
如果以上都不行,Darwin 24的新安全机制可能拦截了老C扩展的内存操作,可尝试关闭部分SIP选项(有安全风险,操作前务必备份系统):
- 重启Mac到恢复模式(开机按住电源键直到出现启动选项)
- 打开终端执行:
csrutil enable --without debug - 重启系统后再测试
补充说明
因为你在Asahi Linux上能正常运行,说明应用代码本身没有问题,所有排查都围绕x86架构下的Ruby/pg gem与新Mac系统的兼容性即可,优先尝试前两个方案,成本最低见效最快。
内容来源于stack exchange
相关产品推荐
相关产品推荐

