Servidor web delgado: `start_tcp_server ': no ​​aceptador (RuntimeError) después del pago de la rama de git

110

Una aplicación Rails 3.2.0, que funciona bien con el servidor web Thin, tanto localmente como en la pila de cedro Heroku.

Después:

$ git branch work
$ git checkout work
$ rails server

Yo obtengo:

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

Además, cuando lo hago:

sudo bundle exec rails server thin -p 3000

Yo obtengo:

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

Tengo el paquete 1.0.22 instalado. Actualizado e instalado. Nada parece funcionar. ¿Algunas ideas?

maeseele
fuente
1
¿Ya tiene un servidor ejecutándose en otra parte de la máquina? ¿Quizás en Pepino o algo así?
Josh Leitzel
1
No, no lo he hecho. En realidad, reiniciar mi computadora resolvió mi problema. Hoy volvió a pasar. Parece suceder cuando cambio de una rama de git a otra.
maeseele
2
¡Gracias! Mi mensaje de error en MacOSX fue ... eventmachine-1.0.0/lib/eventmachine.rb:526:in `start_tcp_server': no acceptor (port is in use or requires root privileges) (RuntimeError).
JJD
Lo mismo para mí cuando intenté usar el mismo puerto para ejecutar dos aplicaciones diferentes. Este tema me hizo pensar en la otra aplicación en ejecución.
Vadorequest

Respuestas:

226

Esto funciona para mi. Encontrar servidor (¿zombie?) (Puede suceder al salir de la terminal con el servidor en ejecución):

$ ps ax | grep rails

Si devuelve algo como:

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

mátalo y corre de nuevo:

$ kill -9 33240
$ rails s
Arta
fuente
17
Si ps ax | grep railsno aparece nada, inténtelo ps ax | grep ruby.
Kevin
3
Definitivamente sucede en OSX si sale directamente de la ventana del terminal mientras se ejecuta el servidor de rieles. +1
notaceo
48

Si hay algún otro proceso que bloquea el puerto, puede averiguar qué PID tiene así:

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

Entonces simplemente mátalo / ellos:

$ kill -9 40466
$ kill -9 40467
Joshua Muheim
fuente
ntopestaba usando el puerto 3000 en mi máquina. La respuesta es acertada.
Tass
47

pgrep ruby para ver qué servidores están funcionando y luego

kill -9 serverNumber

;)

Alborz
fuente
8

servidor rvmsudo rails delgado -p 3000

Lo hace por mi

emprendedor
fuente
6

Tengo este error porque estaba ejecutando rails-dev-box con Rails dentro.

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.

Por lo tanto, se cierra la sesión de Vagrant y se cierra:

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

Eso me ayudó.

Exire
fuente
Yo tuve el mismo problema. Tuve vagabundo corriendo desde un proyecto separado. Probablemente no sea común, pero me ayudó. ¡Gracias! +1
jake
5

Tuve este error porque ya estaba ejecutando rieles en otra terminal. Cerrar mi otro proyecto solucionó esto.

aarona
fuente
1
Si desea ejecutar ambos programas a la vez, puede iniciar su segundo servidor en un puerto diferente.
Kevin
@Kevin gran punto. Eso no era lo que estaba tratando de hacer, simplemente olvidé que el otro proyecto se estaba ejecutando.
aarona
@DJ Eso tiene sentido. Estaba publicando mi comentario para futuros lectores :)
Kevin
2

Me encontré con un problema similar después de regresar a la oficina después de las vacaciones. Ejecuto mi servidor en la IP local como:

rails s thin -b <my_ip>

El problema era que mi IP había cambiado, solo necesitaba usar la nueva.

pepe
fuente
2

Ejecuta esto en la terminal

sudo netstat -lpn |grep rails

Y entonces

sudo kill <job id>
Sam
fuente
Esta fue la única forma en que pude encontrar mis procesos, aunque tuve que buscar más delgado en lugar de rieles.
ladrón de sartén
Sí, funciona en la mayoría de los casos. Si te gustó votar por favor.
Sam
Encontrar y matar la identificación del proceso funcionó. Aunque el primer comando no funcionó para mí, pero ps aux | grep rails.
Francisco Quintero