Servidor web fino: `start_tcp_server ': sem aceitador (RuntimeError) após verificação do branch git

110

Um aplicativo Rails 3.2.0, funcionando bem com servidor web Thin, tanto localmente quanto na pilha de cedro do Heroku.

Depois de:

$ git branch work
$ git checkout work
$ rails server

Eu recebo:

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

Além disso, quando eu faço:

sudo bundle exec rails server thin -p 3000

Eu recebo:

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

Eu tenho o bundler 1.0.22 instalado. Atualizado e instalado. Nada parece funcionar. Alguma ideia?

Maeseele
fonte
1
Você já tem um servidor em execução em outro lugar da máquina? Talvez em pepino ou algo assim?
Josh Leitzel,
1
Não, não tenho. Na verdade, reiniciar meu computador resolveu meu problema. Hoje aconteceu de novo. Parece acontecer quando eu mudo de um branch git para outro.
maeseele
2
Obrigado! Minha mensagem de erro no MacOSX foi ... eventmachine-1.0.0/lib/eventmachine.rb:526:in `start_tcp_server': no acceptor (port is in use or requires root privileges) (RuntimeError).
JJD
O mesmo para mim quando tentei usar a mesma porta para executar dois aplicativos diferentes. Este tópico apenas me fez pensar sobre o outro aplicativo em execução.
Vadorequest de

Respostas:

226

Isso funciona para mim. Encontrar servidor (zumbi?) (Pode acontecer ao sair do terminal com o servidor em execução):

$ ps ax | grep rails

Se retornar 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

mate-o e execute novamente:

$ kill -9 33240
$ rails s
Arta
fonte
17
Se ps ax | grep railsnão encontrar nada, tente ps ax | grep ruby.
Kevin de
3
Definitivamente acontece no OSX se você sair diretamente da janela do terminal enquanto o servidor Rails está em execução. +1
notaceo
48

Se houver qualquer outro processo bloqueando a porta, você pode descobrir qual PID ela possui, assim:

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

Em seguida, simplesmente mate-o / os:

$ kill -9 40466
$ kill -9 40467
Joshua Muheim
fonte
ntopestava usando a porta 3000 na minha máquina. A resposta está correta.
Tass
47

pgrep ruby para ver quais servidores estão rodando e então

kill -9 serverNumber

;)

Alborz
fonte
8

servidor rvmsudo rails thin -p 3000

Faz por mim

wantrapreneur
fonte
6

Eu tenho esse erro porque estava executando rails-dev-box com Rails dentro dele.

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.

Portanto, é desconectado do Vagrant e encerrado:

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

Isso me ajudou.

ExiRe
fonte
Eu tive o mesmo problema. Tive o vagabundo correndo de um projeto separado. Provavelmente não é comum, mas me ajudou. Obrigado! +1
jake
5

Tive esse erro porque já estava rodando Rails em outro terminal. Fechar meu outro projeto consertou isso.

Aarona
fonte
1
Se você deseja executar os dois programas ao mesmo tempo, pode iniciar o segundo servidor em uma porta diferente.
Kevin de
@Kevin grande ponto. Não era isso que eu estava tentando fazer, só esqueci que o outro projeto estava rodando.
aarona
@DJ Isso faz sentido. Eu estava postando meu comentário para futuros leitores :)
Kevin
2

Tive um problema semelhante depois de voltar das férias para o escritório. Eu executo meu servidor no IP local como:

rails s thin -b <my_ip>

O problema era que meu IP havia mudado, eu só precisava usar o novo.

Pepe
fonte
2

Execute isso no terminal

sudo netstat -lpn |grep rails

E depois

sudo kill <job id>
Sam
fonte
Essa foi a única maneira de encontrar meus processos, embora tivesse que procurar por thin em vez de rails.
ladrão de frigideiras de
Sim, funciona na maioria dos casos. Se você gostou de votar, por favor.
Sam
Encontrar e eliminar a identificação do processo resolveu o problema. Embora o primeiro comando não tenha funcionado para mim, mas ps aux | grep rails.
Francisco Quintero