Cienki serwer WWW: `start_tcp_server ': brak akceptora (RuntimeError) po sprawdzeniu oddziału git

110

Aplikacja Rails 3.2.0, działająca dobrze z serwerem WWW Thin, zarówno lokalnie, jak i na stosie cedrowym Heroku.

Po:

$ git branch work
$ git checkout work
$ rails server

Dostaję:

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

Ponadto, kiedy to robię:

sudo bundle exec rails server thin -p 3000

Dostaję:

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

Mam zainstalowany pakiet 1.0.22. Zaktualizowano i zainstalowałem. Wydaje się, że nic nie działa. Jakieś pomysły?

maeseele
źródło
1
Czy masz już serwer działający w innym miejscu na komputerze? Może w ogórku czy coś?
Josh Leitzel
1
Nie, nie mam. Właściwie ponowne uruchomienie komputera rozwiązało mój problem. Dziś to się powtórzyło. Wydaje się, że dzieje się tak, gdy przełączam się z jednej gałęzi git na inną.
maeseele
2
Dzięki! Mój komunikat o błędzie na MacOSX to ... eventmachine-1.0.0/lib/eventmachine.rb:526:in `start_tcp_server': no acceptor (port is in use or requires root privileges) (RuntimeError).
JJD
To samo dotyczy mnie, gdy próbowałem używać tego samego portu do uruchamiania dwóch różnych aplikacji. Ten temat sprawił, że pomyślałem o innej uruchomionej aplikacji.
Vadorequest

Odpowiedzi:

226

To działa dla mnie. Znajdź serwer (zombie?) (Może się zdarzyć podczas zamykania terminala z uruchomionym serwerem):

$ ps ax | grep rails

Jeśli zwróci coś takiego:

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

zabij go i biegnij od nowa:

$ kill -9 33240
$ rails s
Arta
źródło
17
Jeśli ps ax | grep railsnic się nie pojawi , spróbuj ps ax | grep ruby.
Kevin
3
Zdecydowanie dzieje się to na OSX, jeśli od razu zamkniesz okno terminala, gdy serwer rails jest uruchomiony. +1
notaceo
48

Jeśli istnieje inny proces blokujący port, możesz dowiedzieć się, który PID ma w następujący sposób:

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

Następnie po prostu zabij to / je:

$ kill -9 40466
$ kill -9 40467
Joshua Muheim
źródło
ntopużywał portu 3000 na moim komputerze. Odpowiedź jest na miejscu.
Tass
47

pgrep ruby aby zobaczyć, jakie serwery działają, a następnie

kill -9 serverNumber

;)

Alborz
źródło
8

rvmsudo rails server thin -p 3000

Robi to dla mnie

wantrapreneur
źródło
6

Mam ten błąd, ponieważ uruchomiłem rails-dev-box z Railsami w środku.

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.

Więc wylogowuje się z Vagrant i zamyka go:

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

To mi pomogło.

ExiRe
źródło
Miałem ten sam problem. Miałem włóczęgę uciekającą z oddzielnego projektu. Prawdopodobnie nie jest to powszechne, ale pomogło mi. Dzięki! +1
jake
5

Miałem ten błąd, ponieważ miałem już uruchomione railsy w innym terminalu. Zamknięcie mojego innego projektu rozwiązało ten problem.

aarona
źródło
1
Jeśli chcesz uruchomić oba programy jednocześnie, możesz uruchomić drugi serwer na innym porcie.
Kevin
@Kevin świetny punkt. To nie było to, co próbowałem zrobić, po prostu zapomniałem, że inny projekt jest uruchomiony.
aarona
@DJ To ma sens. Publikowałem swój komentarz dla przyszłych czytelników :)
Kevin
2

Podobny problem napotkałem po powrocie do biura z wakacji. Uruchamiam serwer na lokalnym IP jako:

rails s thin -b <my_ip>

Problem polegał na tym, że zmieniło się moje IP, po prostu musiałem użyć nowego.

pepe
źródło
2

Wykonaj to w terminalu

sudo netstat -lpn |grep rails

I wtedy

sudo kill <job id>
Sam
źródło
To był jedyny sposób, w jaki mogłem znaleźć swoje procesy, chociaż musiałem szukać cienkich zamiast szyn.
złodziej patelni
Tak, działa w większości przypadków. Jeśli podobał Ci się głos, proszę.
Sam
Znalezienie i zabicie identyfikatora procesu załatwiło sprawę. Chociaż pierwsza komenda nie zadziałała dla mnie, ale ps aux | grep rails.
Francisco Quintero