EventMachine:“`start_tcp_server':没有接受者(端口正在使用或需要 root 权限)”

EventMachine: "`start_tcp_server': no acceptor (port is in use or requires root privileges)"

当我尝试使用 EventMachine::run 运行服务器时,我不断收到错误消息,提示端口正在使用中。自从我使用命令 nohup.

在后台运行服务器以来,这就开始了

我很确定我已经终止了我启动的进程:

我也觉得可能是我没有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 文件中,该文件不知何故变空了。恢复到默认状态后问题就解决了。