Serveur Web léger: `start_tcp_server ': pas d'accepteur (RuntimeError) après la vérification de la branche git


110

Une application Rails 3.2.0, fonctionnant bien avec le serveur Web Thin, à la fois localement et sur la pile de cèdre Heroku.

Après:

$ git branch work
$ git checkout work
$ rails server

Je reçois:

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

Aussi, quand je fais:

sudo bundle exec rails server thin -p 3000

Je reçois:

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

J'ai installé le bundler 1.0.22. Mis à jour et installé. Rien ne semble fonctionner. Des idées?


1
Avez-vous déjà un serveur en cours d'exécution ailleurs sur la machine? Peut-être en concombre ou quelque chose comme ça?
Josh Leitzel

1
Non, je n'ai pas. En fait, redémarrer mon ordinateur avait résolu mon problème. Aujourd'hui, c'est arrivé à nouveau. Cela semble se produire lorsque je passe d'une branche git à une autre.
maeseele

2
Merci! Mon message d'erreur sur MacOSX était ... eventmachine-1.0.0/lib/eventmachine.rb:526:in `start_tcp_server': no acceptor (port is in use or requires root privileges) (RuntimeError).
JJD

Pareil pour moi quand j'ai essayé d'utiliser le même port pour exécuter deux applications différentes. Ce sujet m'a fait penser à l'autre application en cours d'exécution.
Vadorequest

Réponses:


226

Cela fonctionne pour moi. Trouver le serveur (zombie?) (Peut se produire lors de la fermeture du terminal avec le serveur en cours d'exécution):

$ ps ax | grep rails

S'il renvoie quelque chose comme:

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

tuez-le et recommencez:

$ kill -9 33240
$ rails s

17
Si ps ax | grep railsrien n'apparaît, essayez ps ax | grep ruby.
Kevin

3
Cela se produit définitivement sur OSX si vous quittez directement la fenêtre du terminal pendant que le serveur de rails est en cours d'exécution. +1
notaceo


48

S'il y a un autre processus verrouillant le port, vous pouvez savoir quel PID il a comme ceci:

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

Ensuite, tuez-les simplement:

$ kill -9 40466
$ kill -9 40467

ntoputilisait le port 3000 sur ma machine. La réponse est parfaite.
Tass

47

pgrep ruby pour voir quels serveurs fonctionnent, puis

kill -9 serverNumber

;)



6

J'ai cette erreur parce que j'exécutais rails-dev-box avec des rails à l'intérieur.

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.

Donc est déconnecté de Vagrant et arrêté:

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

Cela m'a aidé.


J'ai eu le même problème. J'avais vagabond en courant d'un projet séparé. Probablement pas courant, mais cela m'a aidé. Merci! +1
jake

5

J'ai eu cette erreur parce que je courais déjà des rails dans un autre terminal. La fermeture de mon autre projet a résolu ce problème.


1
Si vous souhaitez exécuter les deux programmes en même temps, vous pouvez démarrer votre deuxième serveur sur un port différent.
Kevin

@Kevin excellent point. Ce n'était pas ce que j'essayais de faire, j'ai juste oublié que l'autre projet était en cours d'exécution.
aarona

@DJ Cela a du sens. Je postais mon commentaire pour les futurs lecteurs :)
Kevin

2

J'ai rencontré un problème similaire après mon retour au bureau après mes vacances. J'exécute mon serveur sur l'adresse IP locale en tant que:

rails s thin -b <my_ip>

Le problème était que mon adresse IP avait changé, j'avais juste besoin d'utiliser la nouvelle.


2

Exécutez ceci dans le terminal

sudo netstat -lpn |grep rails

Puis

sudo kill <job id>

C'était la seule façon pour moi de trouver mes processus, même si j'ai dû grep pour thin au lieu de rails.
skillet-thief

Oui, cela fonctionne dans la plupart des cas. Si vous avez aimé voter, s'il vous plaît.
Sam

Trouver et tuer l'identifiant du processus a fait l'affaire. Bien que la première commande n'ait pas fonctionné pour moi, mais ps aux | grep rails.
Francisco Quintero
En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.