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

Windows10戴尔灵越AT&T WiFi环境下rackup命令报SocketError求助

解决Windows 10 Git命令行中bundle exec rackup的SocketError问题

嘿,我来帮你搞定这个SocketError: no such service -o/tcp的问题!先给你拆解下核心原因——大概率是命令参数格式错了,或者环境变量没配置对,再加上你环境里Ruby和JRuby共存的小冲突,咱们一步步来解决:

1. 先搞定命令参数的问题

你执行的bundle exec rackup -p $PORT -o $IP在Windows的Git Bash里,很可能是$PORT或$IP这两个环境变量没被正确定义,导致命令解析乱了套,系统居然把-o当成了TCP服务名,这就离谱。

先别用环境变量,直接用具体值测试:

bundle exec rackup -p 4567 -o 0.0.0.0

这里0.0.0.0允许所有IP访问,4567是Sinatra的默认端口,如果这样能正常启动,那问题肯定出在环境变量上。

要是想继续用环境变量,在Git Bash里先手动定义好:

export PORT=4567
export IP=0.0.0.0
bundle exec rackup -p $PORT -o $IP

2. 删掉代码里的错误配置

你说在app.rb和config.ru里写了require 'ruby 2.3.1'——这完全是错误的写法!Ruby版本根本不需要用require来指定,这么写只会让程序去搜一个叫ruby 2.3.1的gem,肯定找不到,还会干扰程序运行。

赶紧把这两行删掉!版本管理应该这么做:

  • 在项目的Gemfile开头加一行:ruby '2.3.1'(如果你用的是标准MRI Ruby)
  • 要是需要切换Ruby版本,用rbenv或者chruby这类版本管理工具,别在代码里瞎折腾。

3. 理清Ruby和JRuby的环境冲突

你同时装了MRI Ruby 2.3.1和JRuby 9,这很容易让bundle命令搞混到底用哪个Ruby环境,进而影响rackup的执行。

先在Git Bash里查下当前用的是哪个Ruby:

ruby -v

如果显示的是JRuby,但你想用来的是MRI Ruby 2.3.1,用版本管理工具切换就行(比如用rbenv的话):

rbenv local 2.3.1

要是没装版本管理工具,直接指定Ruby路径也能行:

C:/Ruby23-x64/bin/ruby.exe -S bundle exec rackup -p 4567 -o 0.0.0.0

4. 别被无关因素干扰

你提到的AT&T Wi-Fi和戴尔驱动,其实和这个TCP错误半毛钱关系都没有!这个错误是本地命令解析或者Ruby环境的问题,不是网络连接层面的故障,别在这上面浪费时间啦。

5. GNU Make的事暂时不用管

你下载的GNU Make只要在系统PATH里就没问题,这个和当前的SocketError没关系,只有后续装需要编译原生扩展的gem时才会用到,现在可以先放一边。


内容的提问来源于stack exchange,提问作者Bill Ben Hackett

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.19 08:43:20