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.