为何M1 MacBook上Rails5项目执行rails s仅支持localhost访问,127.0.0.1无法访问?
M1芯片MacBook Pro运行Rails 5项目127.0.0.1无法访问问题解决方案
该问题核心是M1芯片设备的macOS系统默认将Rails服务绑定到了IPv6的环回地址::1(对应localhost),未监听IPv4的环回地址127.0.0.1,因此会触发Capybara测试的请求失败报错:
Capybara::Poltergeist::StatusFailError: Request to 'http://127.0.0.1:65155/etc' failed to reach server, check DNS and/or server status
可按以下优先级选择解决方案:
- 方案1:启动服务时指定绑定IP
临时生效直接在启动命令后加绑定参数,绑定所有IPv4地址的命令为:
需要同时兼容IPv4和IPv6可以使用bundle exec rails s -b 0.0.0.0bundle exec rails s -b :: - 方案2:修改Capybara默认配置
在测试配置文件(Rails默认是test/test_helper.rb,使用RSpec则是spec/rails_helper.rb)中添加以下配置,让Capybara默认使用localhost发起请求:Capybara.server_host = 'localhost' Capybara.app_host = 'http://localhost' - 方案3:校验系统hosts配置
打开/etc/hosts文件,确认存在以下两行配置,缺失则手动添加后保存生效:127.0.0.1 localhost ::1 localhost - 方案4:配置Puma默认绑定规则
如需长期生效,可直接修改Rails项目的config/puma.rb配置文件,添加绑定规则:# 可根据需要替换为指定IP,0.0.0.0代表绑定所有本地IPv4地址 bind 'tcp://0.0.0.0:3000'
配置完成后启动服务,执行lsof -i :3000(将3000替换为实际服务端口),若返回结果中服务监听地址为*:3000则代表绑定成功,即可正常通过127.0.0.1访问服务。
内容的提问来源于stack exchange,提问作者Mathilde Guyot
相关产品推荐
相关产品推荐

