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?


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

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

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

;)



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.


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.


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.


2

Wykonaj to w terminalu

sudo netstat -lpn |grep rails

I wtedy

sudo kill <job id>

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
Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.