EventMachine:“`start_tcp_server':没有接受者(端口正在使用或需要 root 权限)”
EventMachine: "`start_tcp_server': no acceptor (port is in use or requires root privileges)"
当我尝试使用 EventMachine::run
运行服务器时,我不断收到错误消息,提示端口正在使用中。自从我使用命令 nohup
.
在后台运行服务器以来,这就开始了
我很确定我已经终止了我启动的进程:
- 我发现 ruby 进程带有
ps
,并杀死了它。它不再显示。
- 我也运行了
lsof -i :8081
(8081 是我运行它的端口)但没有任何显示。
- 最后,我多次更改ruby程序中的端口以隐藏端口,仍然报错!
我也觉得可能是我没有root用户,试了root也没用。
我也重启了服务器
如果还有什么可以尝试的,请告诉我。
注意:这是在 debian 上。
终于想通了:原来是我绑定的IP地址不对!
所以本质上这是一个非常具有误导性的错误信息,如果你收到它,也请检查 IP 地址。
当您没有正确停止服务器时会发生这种情况,例如使用 Ctrl+Z 或 运行 暂停服务器两次。
如果按 Ctrl+Z 停止,这对我有用:
获取 运行 进程:
$ ps ax | grep rails
18192 pts/28 Sl+ 0:05 /home/admin/.rvm/rubies/ruby-2.1.2/bin/ruby bin/rails c
20496 pts/23 Tl 0:08 /home/admin/.rvm/rubies/ruby-2.1.2/bin/ruby bin/rails s
20919 pts/23 S+ 0:00 grep --color=auto rails
然后杀掉rails server
运行:
所在的进程
$ kill 20496
如果它在几秒钟后没有关闭,您可以尝试 "force" 关闭 -9
(但这会阻止 Rails 的任何清理):
$ kill -9 20496
现在您可以再次启动服务器了:
$ rails s
有同样的问题。
运行lsof -i :3000
(3000是我运行它开的端口)。
我发现该端口正被 ruby 使用。我使用 kill -9 *pid*
终止了进程。
当我再次 运行 lsof -i :3000
时,什么也没有出现。
然后我 运行 rails s
现在一切正常。
运行 在自由端口上通过以下任一方式解决问题:
rails s -p 3001
或
ruby script/rails server webrick -e production -p 3001
或
ruby script/rails server thin -e production -p 3001
就我而言,这只是互联网连接问题。
也许它会节省某人的时间:
在我的例子中 rails 服务器不会在返回相同错误的任何端口上启动。
重新启动我的机器后的事件。
引用 localhost 的其他服务器也无法正常工作。
问题出在我的 /etc/hosts
文件中,该文件不知何故变空了。恢复到默认状态后问题就解决了。
当我尝试使用 EventMachine::run
运行服务器时,我不断收到错误消息,提示端口正在使用中。自从我使用命令 nohup
.
我很确定我已经终止了我启动的进程:
- 我发现 ruby 进程带有
ps
,并杀死了它。它不再显示。 - 我也运行了
lsof -i :8081
(8081 是我运行它的端口)但没有任何显示。 - 最后,我多次更改ruby程序中的端口以隐藏端口,仍然报错!
我也觉得可能是我没有root用户,试了root也没用。
我也重启了服务器
如果还有什么可以尝试的,请告诉我。
注意:这是在 debian 上。
终于想通了:原来是我绑定的IP地址不对!
所以本质上这是一个非常具有误导性的错误信息,如果你收到它,也请检查 IP 地址。
当您没有正确停止服务器时会发生这种情况,例如使用 Ctrl+Z 或 运行 暂停服务器两次。
如果按 Ctrl+Z 停止,这对我有用:
获取 运行 进程:
$ ps ax | grep rails
18192 pts/28 Sl+ 0:05 /home/admin/.rvm/rubies/ruby-2.1.2/bin/ruby bin/rails c
20496 pts/23 Tl 0:08 /home/admin/.rvm/rubies/ruby-2.1.2/bin/ruby bin/rails s
20919 pts/23 S+ 0:00 grep --color=auto rails
然后杀掉rails server
运行:
$ kill 20496
如果它在几秒钟后没有关闭,您可以尝试 "force" 关闭 -9
(但这会阻止 Rails 的任何清理):
$ kill -9 20496
现在您可以再次启动服务器了:
$ rails s
有同样的问题。
运行lsof -i :3000
(3000是我运行它开的端口)。
我发现该端口正被 ruby 使用。我使用 kill -9 *pid*
终止了进程。
当我再次 运行 lsof -i :3000
时,什么也没有出现。
然后我 运行 rails s
现在一切正常。
运行 在自由端口上通过以下任一方式解决问题:
rails s -p 3001
或
ruby script/rails server webrick -e production -p 3001
或
ruby script/rails server thin -e production -p 3001
就我而言,这只是互联网连接问题。
也许它会节省某人的时间: 在我的例子中 rails 服务器不会在返回相同错误的任何端口上启动。 重新启动我的机器后的事件。 引用 localhost 的其他服务器也无法正常工作。
问题出在我的 /etc/hosts
文件中,该文件不知何故变空了。恢复到默认状态后问题就解决了。