在Windows 10中的git命令行中我执行
bundle exec rackup -p $PORT -o $IP
然后我得到了
套接字错误:没有这样的服务-o / tcp
那么我怎样才能告诉我的计算机TCP在这个软件兼容性混乱中的位置。我做的最后一件事就是在heroku上创建了一个帐户,这是我试图通过Sinatra启动我的ruby应用程序的地方。
答案 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跟踪脚本的执行情况。