Mac M2设备上Rails服务启动失败:Puma启动冻结求助
解决Mac M2上Rails应用启动冻结问题
针对Mac M2设备上Rails 7.0.7.2 + Ruby 3.1.2环境下,所有Rails进程(Puma、rails c等)启动后冻结的问题,结合Linux环境正常的情况,可尝试以下排查和修复步骤:
重新编译适配ARM64架构的Ruby
Mac M2为ARM64架构,若Ruby是通过Rosetta兼容模式安装的,可能引发兼容性阻塞。用rbenv或rvm重新编译Ruby:# 以rbenv为例,先确保brew安装的openssl是ARM版本 RUBY_CONFIGURE_OPTS="--with-openssl-dir=$(brew --prefix openssl@3)" rbenv install 3.1.2安装完成后切换到该版本,重新执行
bundle install。排查PostgreSQL连接阻塞
初始化器加载完成后,进程可能卡在数据库连接阶段:- 修改
config/database.yml,将host从localhost改为127.0.0.1,强制使用TCP连接而非Unix Socket; - 检查本地PostgreSQL的
pg_hba.conf,确保允许本地用户通过TCP或Socket连接; - 临时替换数据库为SQLite3,修改
database.yml后启动应用,验证是否是PostgreSQL相关问题。
- 修改
禁用Spring预加载器
Rails Spring预加载器在ARM架构下偶发兼容性问题,启动时禁用Spring:DISABLE_SPRING=1 bin/rails server # 或启动控制台 DISABLE_SPRING=1 bin/rails console排查Webpacker相关阻塞
若Webpacker自动编译阶段出现阻塞,可尝试:- 启动时禁用Webpacker开发服务器:
WEBPACKER_DEV_SERVER=false bin/rails server - 确保Webpacker版本与Rails 7.0.7.2兼容,执行
bundle update webpacker更新到适配版本。
- 启动时禁用Webpacker开发服务器:
启用详细调试日志定位阻塞点
启动时增加日志输出级别,明确进程挂起的具体阶段:# Rails debug级别日志 RAILS_LOG_LEVEL=debug bin/rails server # Ruby层面调试日志 ruby -v -d bin/rails server重新编译所有Native扩展gem
部分gem(如pg、nokogiri)的Native扩展若为x86_64架构,会导致ARM设备上运行异常:# 强制重新安装所有gem bundle install --force # 单独重新安装pg gem(若有问题) gem install pg -- --with-pg-config=$(brew --prefix postgresql)/bin/pg_config
内容的提问来源于stack exchange,提问作者Arnab
相关产品推荐
相关产品推荐

