Nie można zatrzymać serwera railsowego


126

Jestem nowy w railsach i używam maszyny ubuntu i IDE rubymine. Problem w tym, że nie mogę zatrzymać serwera railsowego. Próbowałem zatrzymać serwer, zabijając proces railsów. Ale kiedy uruchamiam pgrep -l rails, nie znaleziono takiego procesu. Więc mogę zabijać tylko procesy ruby, ale serwer się nie zatrzymuje.

Próbowałem ./script/server stop(odkąd zacząłem to od biegania ./script/server start), ale to nie zadziałało. Szukając w Google i znajdując posty z przepełnieniem stosu, próbowałem zmienić port nasłuchiwania portu lokalnego hosta, ale bez powodzenia. Czy ktoś mógłby pomóc?


2
=> Ctrl-C, aby wyłączyć serwer
gabrielhilal

@Newben chcesz zabić cały proces?
Learner

@Sri, tak, chcę zabić cały proces
epsilones

1
@Newben Sprawdź moją zaktualizowaną odpowiedź poniżej i spróbuj i daj mi znać
Learner

Odpowiedzi:


303

Możesz użyć innych portów, takich jak:

rails server -p 3001

Zwykle w terminalu możesz spróbować Ctrl + Czamknąć serwer.

Innym sposobem na zabicie domyślnego serwera Ruby on Rails (którym jest WEBrick) jest:

kill -INT $(cat tmp/pids/server.pid)

W swoim terminalu, aby znaleźć PID procesu:

$ lsof -wni tcp:3000

Następnie użyj liczby w kolumnie PID, aby zakończyć proces:

Na przykład:

$ kill -9 PID

A niektóre z innych odpowiedzi, które znalazłem, to:

Aby zatrzymać działający serwer railsowy, wciśnij:

CTRL-C
CTRL-Z

Otrzymasz kontrolę z powrotem do bash. Następnie wpisz (bez $):

$ fg

I to wróci do procesu, a następnie zakończy się Rails spoprawnie.

To trochę denerwujące, ale to z pewnością przebija ręczne zabijanie procesu. Nie jest tak źle i to najlepsze, co mogłem zrozumieć.

Zaktualizowana odpowiedź:

Możesz użyć, killall -9 railsaby zabić wszystkie uruchomione aplikacje z „ rails” w nazwie.

killall -9 rails


Przepraszam, lsof -wni tcp: 3000 nic nie zwraca, a nie mam żadnego tmp / pids / folderu
epsilones

Jeśli Webrick jest uruchomiony, jego PID jest w {APP_ROOT}/tmp/pids/server.pidpliku, więc nie musisz go szukać - o ile działa serwer. Tak więc, jeśli zamiast wykonywać ctrl-cpolecenie kill w innym terminalu, natychmiast zabije serwer Webrick.
Learner

Kiedy uruchamiam killall -9 rails, pojawia się komunikat „nie znaleziono takiego procesu”?
epsilones

Przy okazji, folder {APP_ROOT} / tmp / pids / rzeczywiście istnieje, ale jest pusty
epsilones

1
Żadne z tych poleceń nic dla mnie nie zrobiło. Jednak ponowne uruchomienie komputera rozwiązało problem.
Herb Meehan

51

możesz użyć polecenia grep w następujący sposób,

ps aux | grep rails

i wtedy

kill -9 {process_id} 

w rzeczywistości to polecenie przechwytuje tylko '0:00 grep --color = auto rails', co wydaje mi się, że jest to polecenie o nazwie grep ...
epsilones

Dzięki temu rozwiązanie działa na serwerze, który nadal działa nawet przy zamkniętym terminalu. Ładne
ksugiarto

A co, jeśli mam wiele procesów i nie chcę ich ręcznie zabijać jeden po drugim?
Nickolay Kondratenko

Możesz ich wszystkich zabićkillall -9 rails
maximus ツ

aby znaleźć serwer, który musiałem zrobićps aux | grep puma
Sami Birnbaum

27

pkill -9 rails zabić cały proces szyn

Zaktualizowana odpowiedź

ps aux|grep 'rails'|grep -v 'grep'|awk '{ print $2 }'|xargs kill -9

To zabije każdy działający proces railsowy. Zastąp „rails” czymś innym, aby zabić inne procesy.


18

Oto kroki, aby zabić proces serwera:

1. lsof -i tcp:3000

2. kill -9 1234

gdzie 1234jest PID procesu: localhost: 3000 wyświetlany w kroku 1.

LUB

Usuń plik (server.pid) pod Rails.root/tmp/pids/i zrestartuj serwer.

LUB

otwórz aplikację w innym porcie za pomocą polecenia:

rails s -p 3001



10

Generalnie używam:

killall ruby

LUB

pkill -9 ruby

który zabije wszystkie procesy związane rubinowe, które są uruchomione jak rails server, rails consoleitp


Jeśli nie znasz pkill -9 lub kill -9, warto również zauważyć, że może to zabić również inne procesy ruby, na przykład IDE rubymine.
Kjell

4

1. Po prostu usuń plik pid z katalogu aplikacji railsów

Rails_app -> tmp -> pids -> pid file

Usuń plik i uruchom

rails start


2. Dla Rails 5.0 i nowszych możesz użyć tego polecenia

rails restart


3

Służy ctrl+cdo zamykania serwera Webrick.

Niestety, jeśli to nie działa, zamknij na siłę terminal i uruchom go ponownie.

Kolejna sztuczka polega na tym

1. open your system-monitor(a gui application) on ubuntu

2. Select processes tab 

3. Then look for a process having name 'ruby'

4. End that process

nawet po ponownym uruchomieniu czasami serwer działa. Ponieważ musimy wyłączyć temp / pid, aby zatrzymać serwer
Learner

Ale zwykle zakończenie terminala zatrzymuje proces bcoz jego pierwszoplanowy proces i działa na terminalu.
Gopal S Rathore

3

Usuń server.pid z folderu tmp / pids. W moim przypadku błąd brzmiał: Serwer już działa. Sprawdź /home/sbhatta/myapp/tmp/pids/server.pid.

Więc usunąłem server.pid

rm /home/sbhatta/myapp/tmp/pids/server.pid następnie uruchomić rails s


3

Krok 1: sprawdź, jakie elementy zużywają port 3000.

lsof -i:3000

krok 2: znajdź proces o nazwie

Dla Maca

ruby      TCP localhost:hbci (LISTEN)

Dla Ubuntu

ruby      TCP *:3000 (LISTEN)

Krok 3: Znajdź PID procesu i zakończ go.

kill -9 PID


2

Użyłem killall -9 railstak, jak sugerował Sri i to nie zadziałało. Dostosowałem polecenie killall -9 rubyi serwer natychmiast się zamknął.

Tl; dr: killall -9 ruby



1

Gdy serwer railsowy się nie uruchamia to znaczy, że już działa to możesz zacząć używając nowego portu np.

rails s -p 3001

lub uruchamia się i zatrzymuje w takim przypadku, gdy chcesz usunąć folder tymczasowy w strukturze katalogów rails , uruchamia serwer rails.


1

sprawdź /tmp/tmp/server.pid

w środku jest pid.

Zwykle robię „kill -9 THE_PID” w cmd


Nie mam tej ścieżki, gdzie mogłaby być na maszynie Ubuntu?
epsilones

jest ukryty ... przejdź do folderu aplikacji, naciśnij ctrl + H, aby wyświetlić ukryte pliki, a następnie możesz to zobaczyć
Nich,

1

Zauważyłem w systemie Windows (używam 10, ale nie jestem pewien, czy to samo dla oler). Jeśli używasz cmd.exe i ctrl + c, serwer raisl zatrzymuje się poprawnie.

Jednak jeśli używasz Git Bash, tak nie jest. Mówi, że tak, ale kiedy spojrzysz na pids tmp, nadal tam jest.

Może błąd z git bash?


1

killall -9 rubyzabije wszystkie procesy ruby, a przynajmniej na moim komputerze serwery railsowe pojawiają się jako procesy ruby. killall -9 railsjest dużo bardziej szczegółowy i nie działa na starszych wersjach serwerów railsowych (daje 'rails: nie znaleziono procesu', ponieważ proces nazywa się ruby)

Napotkałem ten problem jakiś czas temu. Po wysłaniu formularza w activeadmin, serwer railsowy się zawiesił i nie mogłem go zabić zwykłymi środkami (nawet po ctrl + z nadal działał w tle). Odpowiedź ucznia pomogła, ale to polecenie nie wymaga identyfikatora procesu.


0

Na to pytanie jest już późno. Oto moje 2 centy. Zrobiłem zadanie rake'u, aby zatrzymać serwer, gdy nie mam do niego dostępu. Jednak testowałem tylko na Macu.

Dzięki temu możesz po prostu dodać go do swojego projektu, a następnie uruchomić polecenie rake.

Proszę bardzo:

Link do streszczenia: -najnowsza wersja będzie tutaj. https://gist.github.com/houmanka/289184ca5d8d92de0499#file-server-rake

Tutaj trochę kodu:

# Make a file under: `project_root/lib/tasks/server.rake`

# Then paste the following code

    namespace :server do
      desc "Stop the running server by killing the PID"
      task :kill do
        STDOUT.puts "Enter port number: "
        post_number = STDIN.gets.strip
        system "pid=$(lsof -i:#{post_number.to_i} -t); kill -TERM $pid || kill -KILL $pid"
      end
    end

# Then to use it in the terminal: `rake server:kill`

0

Upewnij się również, że wykonujesz polecenie Cntrl + C w tym samym terminalu (karcie), który jest używany do uruchamiania serwera.

W moim przypadku miałem 2 zakładki, ale zapomniałem zatrzymać serwer z prawidłowej karty i zastanawiałem się, dlaczego Cntrl + C nie działa.


0

Byłby jeden super łatwy sposób

gem install shutup

następnie przejdź do bieżącego folderu projektu railsów i uruchom

shutup # to zabije aktualnie uruchomiony proces Railsów

Możesz użyć polecenia „shutup”, kiedy tylko chcesz

DICLAIMER: Jestem twórcą tego klejnotu

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

rvm @global do gem install shutup


0

Możemy zabić sesję rails na Linuksie używając PORT nr

fuser -k 3000/tcp 

tutaj 3000 to port nr. Teraz zrestartuj serwer, zobaczysz, że twój serwer jest uruchomiony.


0

Wykonaj następujące kroki:

  1. otwórz swój projekt
  2. wybierz w folderze tmp
  3. wybierz folder pids
  4. usuń plik server.pid
  5. teraz uruchom serwer rails

Nie działa na mojej aplikacji rails 5.2. Address already in use - bind(2) for "127.0.0.1" port 3000 (Errno::EADDRINUSE)
a.barbieri

0
  1. Po prostu otwórz plik, korzystając z podanej lokalizacji sudo vi /Users/user1/go/src/github.com/rails_app/rails_project/tmp/pids/server.pid

  2. znajdź identyfikator_procesu / identyfikator_wątku, w którym proces jest uruchomiony.

  3. Zabij określony proces / wątek za pomocą kill -9 84699


0

Na szynach 6 za pomocą

ps aux | grep rails nie zwracał procesu serwera

musiałem zrobić

ps aux | grep puma

aby znaleźć rzeczywisty proces, a następnie zabić go za pomocą

kill -9 {process_id}


0

Jeśli używasz bardziej nowoczesnej wersji Rails i używa ona Pumy jako serwera WWW, możesz uruchomić następujące polecenie, aby znaleźć zablokowany proces Puma:

ps aux | grep puma

Wynik będzie podobny do tego:

85923 100.0  0.8  2682420 131324 s004  R+    2:54pm   3:27.92 puma 3.12.0 (tcp://0.0.0.0:3010) [my-app]
92463   0.0  0.0  2458404   1976 s008  S+    3:09pm   0:00.00 grep puma

Chcesz procesu, do którego się nie odnosi grep. W tym przypadku identyfikator procesu to 85923.

Następnie mogę uruchomić następujące polecenie, aby zabić ten proces:

kill -9 85923

wprowadź opis obrazu tutaj

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.