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