Serwer już działa. Sprawdź… / tmp / pids / server.pid. Wyjście - szyny

80
..$ rails s
=> Booting WEBrick
=> Rails 4.0.4 application starting in development on http://0.0.0.0:3000
=> Run `rails server -h` for more startup options
=> Ctrl-C to shutdown server
A server is already running. Check /home/..name/rprojects/railsapp/tmp/pids/server.pid.
Exiting

jaki jest najłatwiejszy sposób rozwiązania tego problemu dla początkującego w railsach?

ben
źródło
Usunięcie tempfolderu może rozwiązać problem.
shah

Odpowiedzi:

168

Możesz usunąć server.pidplik.

rm /your_project_path/tmp/pids/server.pid

Jeszcze:

spróbuj w OSX:

sudo lsof -iTCP -sTCP:LISTEN -P | grep :3000

lub w systemie Linux:

ps -aef | szyny grep

lub

lsof -wni tcp:3000

zabić proces za pomocą

kill -9 PID (eg,2786)
ben
źródło
1
Nitpicking - ale myślę, że masz na myśli OSX, a nie iOS. @SCraig Odbywa się to w linii poleceń.
jmknoll,
1
Usunąłem plik .pid serwera i nadal miałem problem. Ponowne uruchomienie systemu, choć nie było idealne, było szybką naprawą.
Matt,
Działał jak urok!
William Hampshire
Sir, jak mogę temu zapobiec? Zdarza mi się to bardzo często, znudzi mi się ręczne usuwanie server.pid.
Umagon
130

Krótkie i wyraźne polecenie jednoliniowe, które się tym zajmie.

kill -9 $(lsof -i tcp:3000 -t)
Karan Purohit
źródło
7
lol, możesz najpierw zamknąć kartę przeglądarki, jeśli masz ją otwartą na localhost: 3000, w przeciwnym razie może to zabić twoją przeglądarkę
TM w
ktoś próbował zapisać to jako alias w zsh i nie działa?
stackjlei
Czasami mój serwer został zamknięty, ale Ruby przekroczył maksymalny poziom procesora. Kiedy tak jest, muszę zabić ruby, uruchamiając toppobierając PID, a następnie uruchamiająckill -9 <PID>
daveomcd
17

server.pid zawiera tylko identyfikator procesu działającego serwera.

Jeśli zrobisz:

more /your_project_path/tmp/pids/server.pid

otrzymasz numer (powiedzmy 6745), którego możesz użyć do zatrzymania poprzedniego serwera za pomocą polecenia kill:

kill -9 6745

a następnie możesz usunąć plik za pomocą rmpolecenia

rm /your_project_path/tmp/pids/server.pid
muichkine
źródło
1
Zamknięcie odwrotnymi server.pidznakami mogłoby spowodować, że powłoka spróbuje wykonać server.pid, prawda?
mwfearnley
14

Jeśli używasz docker-compose, a w docker-compose.yml masz: volumes: - .:/myapp Oznacza to, że lokalny obszar roboczy jest mapowany na folder container / myapp.

Cokolwiek w / myapp nie zostanie usunięte dla zdefiniowanych woluminów.

Możesz usunąć ./tmp/pids/server.pidna swoim komputerze lokalnym. Wtedy kontener / myapp nie będzie miał tego pliku.

Pas ruchu
źródło
4
Można też po prostu usunąć ten plik automatycznie przy każdym starcie zbiornika: command: bash -c "rm -f tmp/pids/server.pid && bundle exec rails s -p 3000 -b '0.0.0.0'". Odniesienia
leymannx
12

Prosty:

przejdź do folderu głównego projektu, kiedy to się stanie i uruchom:

gem install shutup
shutup

Spowoduje to znalezienie aktualnie uruchomionego procesu, zabicie go i wyczyszczenie pliku pid

UWAGA: jeśli używasz rvm, zainstaluj gem globalnie

rvm @global do gem install shutup
Lorenzo Sinisi
źródło
5

Problem można rozwiązać za pomocą:

kill -9 $(more /home/..name/rprojects/railsapp/tmp/pids/server.pid)
webster
źródło
5

Dzieje się tak czasami, ponieważ wyłączasz serwer na siłę, na przykład ręcznie wyłączając system operacyjny / maszynę, aby serwer nie miał wystarczająco dużo czasu na zalogowanie się do server.pid.

Jednym prostym sposobem jest ręczne przejście do tmp/pids/(katalogu wyświetlonego w konsoli) i usunięcie server.pidpliku. Następnie, po ponownym uruchomieniu serwera rails serverlub rails sutworzeniu nowego server.pid i możesz kontynuować rozwój.

Smoczy rycerz
źródło
3

sposób GUI dla systemu Windows użytkownika

otwórz ResourceMonitor (taskmanager -> Performance -> ResourceMonitor) i zabij proces ruby.exe

wprowadź opis obrazu tutaj

Alexander Sidikov Pfeif
źródło
3

Otwórz path/to/your/rails/project/tmp/pids/server.pidplik.

Skopiuj numer, który tam znajdziesz.

Biegać kill -9 [PID]

Gdzie [PID]jest numer skopiowany z server.pidpliku.

To zabije działający proces serwera i będziesz mógł ponownie uruchomić serwer bez żadnych problemów.

Daniel Okwufulueze
źródło
3

Zabij server.pid za pomocą polecenia:

kill -9 `cat /root/myapp/tmp/pids/server.pid`

Uwaga: użyj ścieżki server.pid, która jest wyświetlana w konsoli / terminalu.

Dziękuję Ci.

Rahul2692
źródło
3

Dodatkowe informacje w kontekście uruchamiania aplikacji w dockerze.

W pliku docker-compose.yml, pod samym kontenerem aplikacji, możesz użyć jednego z poniższych:

command: ["rm /your-app-path/tmp/pids/server.pid && bundle exec bin/rails s -p 3000 -b '0.0.0.0'"]

lub

command: ["rm /your-app-path/tmp/pids/server.pid; foreman start"]

Zwróć uwagę na użycie jednego ;lub &&, które &&wyśle ​​sygnał wyjścia, jeśli rmnie znajdzie pliku, zmuszając kontener do przedwczesnego zatrzymania. Używanie ;będzie kontynuowane.

Dlaczego jest to spowodowane w pierwszej kolejności? Powodem jest to, że jeśli serwer (puma / thin / cokolwiek) nie zakończy pracy, pozostawi pid w maszynie hosta, powodując błąd wyjścia.

Aby zapewnić przenośność, zamiast ręcznie usuwać plik w systemie hosta, lepiej sprawdzić, czy plik istnieje w skrypcie lub w samym pliku redagowania.

Jimmy MG Lim
źródło
3

First Find PID # - gdzie serwer Railsów utknął

Uruchom to, aby znaleźć zablokowany PID

cat ./tmp/pids/server.pid

Zwróci coś takiego 65829

Następnie ZABIJ ten PID =>kill 65829

jso1919
źródło
2

Uruchom to polecenie -

lsof -wni tcp:3000

wtedy otrzymasz następującą tabelę -

COMMAND  PID  USER   FD   TYPE DEVICE SIZE/OFF NODE NAME
ruby    2552 shyam   17u  IPv4  44599      0t0  TCP 127.0.0.1:3000 (LISTEN)
ruby    2552 shyam   18u  IPv6  44600      0t0  TCP [::1]:3000 (LISTEN)

Uruchom to polecenie i zastąp PID z powyższej tabeli

kill -9 PID

przykład:

kill -9 2552

Pradnyesh patil
źródło
0

W przypadku tego problemu

Co zrobiłem to:

  • Usuń folder Pids, który znajduje się pod app/tmp/
  • a następnie zamknij terminal, na którym uruchamiamy bieżącą aplikację i zamknij zakładkę (w oknie przeglądarki)

  • następnie ponownie otwórz terminal, wchodząc do folderu, a następnie zrób, rails s

  • Następnie otwiera nową kartę, na której działa nasza aplikacja
sowmya
źródło
0

najpierw skopiuj numer wewnątrz pliku, a następnie usuń go: rm /your_project_path/tmp/pids/server.pid i utwórz go ponownie. dotknij /YOUR_PROJECT_PATH/tmp/pids/server.pid To zadziałało.

Mounaim
źródło
0

Uruchom poniższe polecenie na terminalu (tylko dla systemu Linux)

ps aux | grep rails

i wtedy

kill -9 [pid]

Inny sposób

lsof -wni tcp:3000

i wtedy

kill -9 [PID]
Arvind singh
źródło
0

ROZWIĄZYWANIE

Adres już używany - bind (2) ”błąd 500 w Ruby on Rails

Ostatnio próbowałem uruchomić aplikację Rails na serwerze produkcyjnym. Nie tylko to nie zadziałało, ale także zepsuło mój serwer programistyczny localhost: 3000. Lokalny host załadowałby tylko pustą białą stronę lub błąd 500.

Aby rozwiązać ten problem, użyłem dwóch szybkich poleceń. Jeśli nie zwracają one wyniku, być może trzeba będzie poszukać rozwiązania w innym miejscu, ale jest to dobra i szybka naprawa.

lsof -wni tcp: 3000

ruby 52179 rachelchervin 50u IPv6 0x ... 7aa3 0t0 TCP [:: 1]: hbci (SŁUCHAJ)
ruby 52179 rachelchervin 51u IPv4 0x ... c7bb 0t0 TCP 127.0.0.1:hbci (SŁUCHAJ)
ruby 52180 rachelchervin 50u IPv6 0x ... 7aa3 0t0 TCP [:: 1]: hbci (SŁUCHAJ)
ruby 52180 rachelchervin 51u IPv4 0x ... c7bb 0t0 TCP 127.0.0.1:hbci (SŁUCHAJ)

To polecenie pokazuje wszystkie moje aktualnie uruchomione procesy i ich PID (identyfikatory procesów) na porcie 3000. Ponieważ istnieją uruchomione procesy, które nie zamknęły się poprawnie, mój nowy serwer: 3000 nie może się uruchomić, stąd błąd 500.

zabij 52179

zabij 52180

szyny s

Użyłem polecenia kill Linux, aby ręcznie zatrzymać szkodliwe procesy. Jeśli masz więcej niż 4, po prostu użyj kill na dowolnym identyfikatorze PID, aż pierwsze polecenie stanie się puste. Następnie spróbuj ponownie uruchomić serwer localhost: 3000. To nie uszkodzi twojego komputera! Po prostu zabija istniejące procesy ruby ​​na porcie hosta lokalnego. Nowy serwer rozpocznie te procesy od nowa. Powodzenia!

Tomasz
źródło
0

ROZWIĄZANIE dla Windows:

  1. zobacz pid z \ tmp \ pids \ server.pid
  2. otwórz cmd jako administrator
  3. taskkill / F / PID [pid z kroku 1.]
  4. usuń plik server.pid
  5. zrestartuj serwer
tanay burreja
źródło
0

Dla ubuntu 20, kill -9 $(ps -aef | grep rails)

riddhi
źródło