瘦网络服务器:`start_tcp_server':git分支签出后没有接受器(RuntimeError)


110

一个Rails 3.2.0应用程序,可以在本地和Heroku雪松堆栈上与Thin Web服务器正常工作。

后:

$ git branch work
$ git checkout work
$ rails server

我得到:

=> Booting Thin
=> Rails 3.2.0 application starting in development on http://0.0.0.0:3000
=> Call with -d to detach
=> Ctrl-C to shutdown server
>> Thin web server (v1.3.1 codename Triple Espresso)
>> Maximum connections set to 1024
>> Listening on 0.0.0.0:3000, CTRL+C to stop
Exiting
/Users/peter/.rvm/gems/ruby-1.9.3-p125/gems/eventmachine-0.12.10/lib/eventmachine.rb:572:in `start_tcp_server': no acceptor (RuntimeError)
from /Users/peter/.rvm/gems/ruby-1.9.3-p125/gems/eventmachine-0.12.10/lib/eventmachine.rb:572:in `start_server'
from /Users/peter/.rvm/gems/ruby-1.9.3-p125/gems/thin-1.3.1/lib/thin/backends/tcp_server.rb:16:in `connect'
from /Users/peter/.rvm/gems/ruby-1.9.3-p125/gems/thin-1.3.1/lib/thin/backends/base.rb:53:in `block in start'
from /Users/peter/.rvm/gems/ruby-1.9.3-p125/gems/eventmachine-0.12.10/lib/eventmachine.rb:256:in `call'
from /Users/peter/.rvm/gems/ruby-1.9.3-p125/gems/eventmachine-0.12.10/lib/eventmachine.rb:256:in `run_machine'
from /Users/peter/.rvm/gems/ruby-1.9.3-p125/gems/eventmachine-0.12.10/lib/eventmachine.rb:256:in `run'
from /Users/peter/.rvm/gems/ruby-1.9.3-p125/gems/thin-1.3.1/lib/thin/backends/base.rb:61:in `start'
from /Users/peter/.rvm/gems/ruby-1.9.3-p125/gems/thin-1.3.1/lib/thin/server.rb:159:in `start'
from /Users/peter/.rvm/gems/ruby-1.9.3-p125/gems/rack-1.4.1/lib/rack/handler/thin.rb:13:in `run'
from /Users/peter/.rvm/gems/ruby-1.9.3-p125/gems/rack-1.4.1/lib/rack/server.rb:265:in `start'
from /Users/peter/.rvm/gems/ruby-1.9.3-p125/gems/railties-3.2.0/lib/rails/commands/server.rb:70:in `start'
from /Users/peter/.rvm/gems/ruby-1.9.3-p125/gems/railties-3.2.0/lib/rails/commands.rb:55:in `block in <top (required)>'
from /Users/peter/.rvm/gems/ruby-1.9.3-p125/gems/railties-3.2.0/lib/rails/commands.rb:50:in `tap'
from /Users/peter/.rvm/gems/ruby-1.9.3-p125/gems/railties-3.2.0/lib/rails/commands.rb:50:in `<top (required)>'
from script/rails:6:in `require'
from script/rails:6:in `<main>'

另外,当我这样做时:

sudo bundle exec rails server thin -p 3000

我得到:

/Users/peter/.rvm/rubies/ruby-1.9.3-p125/lib/ruby/site_ruby/1.9.1/rubygems/dependency.rb:247:in `to_specs': Could not find bundler (>= 0) amongst [bigdecimal-1.1.0, io-console-0.3, json-1.5.4, minitest-2.5.1, rake-0.9.2.2, rdoc-3.9.4] (Gem::LoadError)
from /Users/peter/.rvm/rubies/ruby-1.9.3-p125/lib/ruby/site_ruby/1.9.1/rubygems/dependency.rb:256:in `to_spec'
from /Users/peter/.rvm/rubies/ruby-1.9.3-p125/lib/ruby/site_ruby/1.9.1/rubygems.rb:1210:in `gem'
from /Users/peter/.rvm/gems/ruby-1.9.3-p125/bin/bundle:18:in `<main>'

我已安装捆绑程序1.0.22。更新并安装了它。似乎没有任何作用。有任何想法吗?


1
您是否已经在计算机上的其他位置运行了服务器?也许在黄瓜之类的东西?
乔什·莱兹尔

1
不,我没有。实际上,重新启动计算机已经解决了我的问题。今天又发生了。当我从一个git分支切换到另一个时,似乎发生了。
maeseele 2012年

2
谢谢!我在MacOSX上的错误消息是... eventmachine-1.0.0/lib/eventmachine.rb:526:in `start_tcp_server': no acceptor (port is in use or requires root privileges) (RuntimeError)
JJD

当我尝试使用相同的端口运行两个不同的应用程序时,对我来说也是一样。这个话题使我想到了另一个正在运行的应用程序。
Vadorequest

Answers:


226

这对我有用。查找(僵尸?)服务器(在运行服务器的情况下退出终端时可能会发生):

$ ps ax | grep rails

如果返回类似:

33467 s002 S+ 0:00.00 grep rails
33240 s003 S+ 0:15.05 /Users/Arta/.rbenv/versions/1.9.2-p290/bin/ruby script/rails s -p 3000

杀死它,然后重新运行:

$ kill -9 33240
$ rails s

17
如果ps ax | grep rails没有打开,请尝试ps ax | grep ruby
凯文(Kevin)

3
如果在Rails服务器运行时直接退出终端窗口,肯定会在OSX上发生。+1
notaceo


48

如果还有其他进程锁定端口,则可以找到它具有哪个PID,如下所示:

$ lsof -i :3000
COMMAND     PID USER   FD   TYPE             DEVICE SIZE/OFF NODE NAME
Passenger 40466 josh    5u  IPv4 0x7cae9332073ed4df      0t0  TCP *:hbci (LISTEN)
Passenger 40467 josh    5u  IPv4 0x7cae9332073ed4df      0t0  TCP *:hbci (LISTEN)

然后简单地杀死它/他们:

$ kill -9 40466
$ kill -9 40467

ntop在我的机器上使用端口3000。答案就在眼前。
塔斯(Tass)2014年

47

pgrep ruby 查看正在运行的服务器,然后

kill -9 serverNumber

;)


8

rvmsudo Rails服务器薄-p 3000

对我有用吗


6

我有此错误,因为我正在运行带有Rails的rails-dev-box

Port 3000 in the host computer is forwarded to port 3000 in the virtual machine. 
Thus, applications running in the virtual machine can be accessed via 
localhost:3000 in the host computer.

因此从Vagrant注销并关闭了它:

vagrant@rails-dev-box:/vagrant/rails$ exit
$ vagrant halt

那对我有帮助。


我有同样的问题。我有一个来自一个单独项目的无业游民。可能并不常见,但这对我有所帮助。谢谢!+1
jake

5

我遇到了这个错误,因为我已经在另一个终端上运行了rails。关闭我的另一个项目解决了这个问题。


1
如果要一次运行两个程序,则可以在另一个端口上启动第二台服务器。
凯文

@凯文大点。那不是我试图做的,只是忘记了另一个项目正在运行。
阿罗纳2014年

@DJ有道理。我正在为以后的读者发布评论:)
凯文(Kevin)

2

假期回到办公室后,我遇到了类似的问题。我在本地IP上运行服务器:

rails s thin -b <my_ip>

问题是我的IP已经更改,我只需要使用新的IP。


2

在终端执行

sudo netstat -lpn |grep rails

然后

sudo kill <job id>

这是我能够找到自己的进程的唯一方法,尽管我必须grep来实现瘦而不是用rails。
技术小偷小偷

是的,它适用于大多数情况。如果您喜欢投票,请。
山姆

找到并杀死进程ID可以解决问题。虽然第一个命令对我没用,但是ps aux | grep rails
弗朗西斯科·昆特罗
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.