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.