You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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模式下的兼容性冲突,给你几个优先级从高到低的尝试方向:

  1. 优先升级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编译的
  1. 修复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。

  1. 验证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
  1. 临时调整系统安全设置(谨慎操作)
    如果以上都不行,Darwin 24的新安全机制可能拦截了老C扩展的内存操作,可尝试关闭部分SIP选项(有安全风险,操作前务必备份系统):
  • 重启Mac到恢复模式(开机按住电源键直到出现启动选项)
  • 打开终端执行:csrutil enable --without debug
  • 重启系统后再测试

补充说明

因为你在Asahi Linux上能正常运行,说明应用代码本身没有问题,所有排查都围绕x86架构下的Ruby/pg gem与新Mac系统的兼容性即可,优先尝试前两个方案,成本最低见效最快。

内容来源于stack exchange

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.04.07 09:50:27