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?



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)

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)

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

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.


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

5

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

kill -9 $(more /home/..name/rprojects/railsapp/tmp/pids/server.pid)

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.


3

sposób GUI dla systemu Windows użytkownika

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

wprowadź opis obrazu tutaj


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.


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.


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.


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


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


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

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.


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]

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!


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

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.