在戴尔inspiron上的windows 10 att wifi SocketError:没有这样的服务-o / tcp

时间:2018-02-16 14:24:59

标签: ruby git sinatra

在Windows 10中的git命令行中我执行

bundle exec rackup -p $PORT -o $IP

然后我得到了

  

套接字错误:没有这样的服务-o / tcp

  • 我的互联网连接是通过AT& T和
  • 的Wi-Fi
  • 从戴尔下载驱动程序。
  • 下载Ruby for Windows我做了我的app.rb和 config.ru要求' sinatra'并要求' ruby​​ 2.3.1'。
  • 下载了java 8和jruby 9。
  • 我不得不从gnu下载make,因为它无法找到它。

那么我怎样才能告诉我的计算机TCP在这个软件兼容性混乱中的位置。我做的最后一件事就是在heroku上创建了一个帐户,这是我试图通过Sinatra启动我的ruby应用程序的地方。

1 个答案:

答案 0 :(得分:0)

从错误消息socket error: no such service -o/tcp的观察中,我的疯狂通灵调试“技巧”表明你(或其他人)以某种方式搞砸一些字符串来调用某事(看起来像是{ {1}})以便rackup字符串最终放在某个网址的主机部分末尾的-o之后。

因为在Unix-y系统上(通常)可以使用字符串而不是端口号(所以你可以这样做,比如:代替telnet somehost smtp),并且在这样的情况下如果该字符串代表“服务”的名称,则查询特殊数据库(通常是名为“/ etc / services”的文件)以将该字符串“解析”为协议和数字。快速演示(在Debian系统上):

telnet somehost 25

所以,我的猜测是,当你打电话

~$ getent services smtp
smtp                  25/tcp mail
~$ getent services http
http                  80/tcp www

bundle exec rackup -p $PORT -o $IP 变量最终为空(或未定义)并且 - 通过Unix shell规则 - 实际命令变为

PORT

...这使得bundle exec rackup -p -o $IP 可能会将rackup作为端口号 (因为这是作为-o的参数传递的内容; 据说它试图调用-p传递是getaddrinfo(3) 作为服务的名称,失败。

敷贴

-o

并且shell脚本的启动有助于捕获此类错误。

另一种方法是使用

执行失败的脚本
set -e -u

以便shell跟踪脚本的执行情况。