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

时间:2017-09-23 12:23:55

标签: ruby-on-rails server eventmachine

尝试启动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)

我尝试了以下命令来查找并终止该进程,但是没有一个命令显示任何运行在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参数需要一个选项。根据{{​​1}},协议列表位于man netstat

我查看了该文件,发现etc/protocols是列出的协议。但是,此命令不返回任何输出:

tcp

此命令也不会返回任何内容:

netstat -lntp tcp | grep 3000

2 个答案:

答案 0 :(得分:0)

您可以尝试像lsof -i :3000一样扫描端口,然后使用sudo kill -9 <PID>终止该过程。

答案 1 :(得分:0)

嗯,事实证明这个问题的答案相当模糊。 FileMaker服务器16的Node实例在端口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