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?

Maeseele
quelle
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
Arta
quelle
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
Joshua Muheim
quelle
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

;)

Alborz
quelle
8

rvmsudo Rails Server Thin-P 3000

Tut es für mich

Wantrapreneur
quelle
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.

ExiRe
quelle
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.

aarona
quelle
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.

pepe
quelle
2

Führen Sie dies im Terminal aus

sudo netstat -lpn |grep rails

Und dann

sudo kill <job id>
Sam
quelle
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