Dünner Webserver: `start_tcp_server ': Kein Akzeptor (RuntimeError) nach dem Auschecken des Git-Zweigs


110

Eine Rails 3.2.0-App, die sowohl lokal als auch auf dem Heroku-Zedernstapel problemlos mit Thin-Webservern funktioniert.

Nach dem:

$ git branch work
$ git checkout work
$ rails server

Ich bekomme:

=> 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>'

Auch wenn ich es tue:

sudo bundle exec rails server thin -p 3000

Ich bekomme:

/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>'

Ich habe Bundler 1.0.22 installiert. Aktualisiert und installiert. Nichts scheint zu funktionieren. Irgendwelche Ideen?


1
Haben Sie bereits einen Server, der an anderer Stelle auf dem Computer ausgeführt wird? Vielleicht in Gurke oder so?
Josh Leitzel

1
Nein, habe ich nicht. Ein Neustart meines Computers hatte mein Problem gelöst. Heute ist es wieder passiert. Scheint zu passieren, wenn ich von einem Git-Zweig zu einem anderen wechsle.
Maeseele

2
Vielen Dank! Meine Fehlermeldung unter MacOSX war ... eventmachine-1.0.0/lib/eventmachine.rb:526:in `start_tcp_server': no acceptor (port is in use or requires root privileges) (RuntimeError).
JJD

Dasselbe gilt für mich, als ich versucht habe, denselben Port zum Ausführen von zwei verschiedenen Anwendungen zu verwenden. Dieses Thema hat mich nur über die andere laufende Anwendung nachdenken lassen.
Vadorequest

Antworten:


226

Das funktioniert bei mir. Server suchen (Zombie?) (Kann passieren, wenn das Terminal bei laufendem Server beendet wird):

$ ps ax | grep rails

Wenn es etwas zurückgibt wie:

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

töte es und renne neu:

$ kill -9 33240
$ rails s

17
Wenn ps ax | grep railsnichts auftaucht, versuchen Sie es ps ax | grep ruby.
Kevin

3
Unter OSX passiert dies definitiv, wenn Sie das Terminalfenster direkt verlassen, während der Rails-Server ausgeführt wird. +1
Notaceo


48

Wenn ein anderer Prozess den Port sperrt, können Sie herausfinden, welche PID er hat:

$ 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)

Dann töte es einfach / sie:

$ kill -9 40466
$ kill -9 40467

ntopIch habe Port 3000 auf meinem Computer verwendet. Die Antwort ist genau richtig.
Tass

47

pgrep ruby um zu sehen, welche Server laufen und dann

kill -9 serverNumber

;)



6

Ich habe diesen Fehler, weil ich Rails-Dev-Box mit Rails darin ausgeführt habe.

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.

Also wird von Vagrant abgemeldet und heruntergefahren:

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

Das hat mir geholfen.


Ich hatte das gleiche Problem. Ich hatte einen Landstreicher, der vor einem separaten Projekt lief. Wahrscheinlich nicht üblich, aber es hat mir geholfen. Vielen Dank! +1
Jake

5

Ich hatte diesen Fehler, weil ich bereits Schienen in einem anderen Terminal lief. Das Schließen meines anderen Projekts hat dies behoben.


1
Wenn Sie beide Programme gleichzeitig ausführen möchten, können Sie Ihren zweiten Server an einem anderen Port starten.
Kevin

@ Kevin toller Punkt. Das habe ich nicht versucht, habe nur vergessen, dass das andere Projekt lief.
Aarona

@ DJ Das macht Sinn. Ich habe meinen Kommentar für zukünftige Leser gepostet :)
Kevin

2

Nachdem ich aus dem Urlaub ins Büro zurückgekehrt war, stieß ich auf ein ähnliches Problem. Ich führe meinen Server auf der lokalen IP aus als:

rails s thin -b <my_ip>

Das Problem war, dass sich meine IP geändert hatte, ich musste nur die neue verwenden.


2

Führen Sie dies im Terminal aus

sudo netstat -lpn |grep rails

Und dann

sudo kill <job id>

Nur so konnte ich meine Prozesse finden, obwohl ich nach dünnen statt nach Schienen suchen musste.
Skillet-Dieb

Ja, es funktioniert in den meisten Fällen. Wenn Sie gerne abstimmen möchten, bitte.
Sam

Das Finden und Beenden der Prozess-ID hat den Trick getan. Der erste Befehl hat zwar bei mir aber nicht funktioniert ps aux | grep rails.
Francisco Quintero
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.