rails: 端口正在使用或需要 root 权限

rails: port is in use or requires root privileges

我在尝试启动 rails 4.1.1 服务器时遇到此错误:

Listening on 0.0.0.0:3000, CTRL+C to stop
Exiting
/Users/darrenburgess/.rvm/gems/ruby-2.1.2@myflix/gems/eventmachine-1.0.0/lib/eventmachine.rb:526:in `start_tcp_server': no acceptor (port is in use or requires root privileges) (RuntimeError)

我已尝试使用以下命令来查找和终止进程,但是其中 none 会显示 3000

上的任何服务器 运行
ps ax | grep rails
ps ax | grep ruby
lsof -i TCP | grep LISTEN
lsof -i :3000

根据我对堆栈溢出的研究,这些似乎是发现 运行 端口的所有可用方法。

在 rails 5 应用程序中,我收到以下类似错误:

Listening on tcp://0.0.0.0:3000
Exiting
/Users/darrenburgess/.rvm/gems/ruby-2.3.1/gems/puma-3.7.0/lib/puma/binder.rb:269:in `initialize': Address already in use - bind(2) for "0.0.0.0" port 3000 (Errno::EADDRINUSE)

请注意,我可以在其他端口上启动 rails 服务器。

即使在机器重新启动后此错误仍然存​​在。似乎我已经用尽所有途径来查找和关闭正在使用的端口。我还可以尝试哪些其他事情?

更新: @hjpotter92 建议 运行:

netstat -lntp | grep 3000

然而,这不起作用,因为 p 参数需要一个选项。根据 man netstat,协议列表位于 etc/protocols

我查看了那个文件,发现 tcp 是一个列出的协议。但是,此命令不会 return 任何输出:

netstat -lntp tcp | grep 3000

此命令 return 也没有任何作用:

netstat -lnt | grep 3000

您可以尝试像这样 lsof -i :3000 扫描端口,然后使用 sudo kill -9 <PID>.

终止进程

好吧,事实证明这个问题的答案相当晦涩。 FileMaker 服务器 16 的节点实例 运行 在端口 3000 上。我是 运行 我的 Rails 开发机器上的 FileMaker 服务器。

此命令有助于发现:

sudo lsof -P -i :3000

结果

node    562 fmserver   20u  IPv6 0x3ef1908b38776fe5      0t0  TCP *:3000 (LISTEN)

我可以终止该进程,但选择禁用 Node 实例(FileMaker REST/Data API)。

此处的文档显示 FileMaker 16 正在使用该端口。 http://help.filemaker.com/app/answers/detail/a_id/16319