Jak zatrzymać serwer demona w Rails?

Uruchamiam moją aplikację rails używając następującego

  $script/server -d webrick 

W moim systemie Ubuntu, powyższe polecenie Uruchom serwer webrick w tle . Mogę zabić proces używając polecenia kill

  $kill pid

Czy rails dostarcza jakieś polecenie, aby zatrzymać działający w tle daemon server ?

Jak ten dostarczony przez rails do uruchomienia serwera, dzięki .

EDIT Kiedy należy uruchomić serwer daemon ? Każdy scenariusz w czasie rzeczywistym pomoże dzięki

Author: Srinivas M.V., 2009-07-22

15 answers

A może grabie?

desc 'stop rails'
task :stop do
    pid_file = 'tmp/pids/server.pid'
    pid = File.read(pid_file).to_i
    Process.kill 9, pid
    File.delete pid_file
end

Uruchom z rake stop lub sudo rake stop

 29
Author: pguardiario,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2012-05-25 02:06:32

Jeśli to może być przydatne, w Linuksie możesz znaleźć, który proces używa portu (w tym przypadku 3000), którego możesz użyć:

Lsof-i: 3000

Zwróci też pid

 80
Author: magnum,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2011-01-24 12:47:34

Jak powiedział Ryan:

PID, którego chcesz jest w tmp / pids /

Prawdopodobnie serwer.pid to plik, który chcesz.

Powinieneś być w stanie uruchomić kill -9 $(cat tmp/pids/server.pid), aby obniżyć demonizowany serwer.

 36
Author: Douglas Meyer,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2010-02-02 22:32:37

Identyfikator procesu serwera demona jest przechowywany w katalogu aplikacji tmp / pids/. Możesz użyć swojego standardowego kill process_id z informacjami, które tam znajdziesz.

 18
Author: Ryan,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2009-08-14 23:35:51

Jedynym właściwym sposobem na zabicie domyślnego serwera Ruby on Rails (jakim jest WEBrick) jest:

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

Jeśli biegasz Kundel, to wystarczy:

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

Użyj kill -9 Jeśli twój Demon zawiesił się. Pamiętaj o konsekwencjach kill -9 - Jeśli dane przechowywane w pamięci podręcznej Active Record nie zostaną spłukane na dysk, utracisz dane. (Tak jak ostatnio)

 16
Author: Nowaker,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2012-04-04 17:28:53

W Terminalu, aby dowiedzieć się o ID procesu (PID):

$ lsof -wni tcp:3000

Następnie użyj liczby w kolumnie PID, aby zabić proces:

$ kill -9 <PID>
 14
Author: Ramiz Raja,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2013-05-31 06:01:43

Pguardiario wyprzedził mnie, choć jego implementacja jest nieco niebezpieczna, ponieważ używa SIGKILL zamiast (zalecanego) SIGINT. Oto zadanie rake, które zazwyczaj importuję do moich projektów programistycznych:

Lib / tasks / stopserver.grabie

desc 'stop server'
task :stopserver do
  pid_file = 'tmp/pids/server.pid'
  if File.file?(pid_file)
    print "Shutting down WEBrick\n"
    pid = File.read(pid_file).to_i
    Process.kill "INT", pid
  end
  File.file?(pid_file) && File.delete(pid_file)
end

Powoduje przerwanie serwera wtedy i tylko wtedy, gdy plik PID istnieje. Nie wyrzuca brzydkich błędów, jeśli serwer nie działa, i powiadamia Cię, Jeśli faktycznie wyłącza serwer.

Jeśli zauważ, że serwer nie chce się wyłączać przy użyciu tego zadania, dodaj następującą linię po linii Process.kill "INT" i spróbuj uaktualnić do jądra, które ma ten błąd naprawiony.

Process.kill "CONT", pid

(końcówka kapelusza: jackr)

 6
Author: Justin ᚅᚔᚈᚄᚒᚔ,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-05-23 11:46:23

Uruchom to polecenie:

locate tmp/pids/server.pid

Wyjście: Pełna ścieżka do tego pliku. Sprawdź nazwę katalogu projektu, aby znaleźć dany plik, jeśli na liście znajduje się wiele plików.

Następnie uruchom polecenie:

rm -rf [complete path of tmp/pids/server.pid file]
 6
Author: Taimoor Changaiz,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2014-09-25 14:05:27

Bilet rubinowy, http://bugs.ruby-lang.org/issues/4777 , sugeruje, że to błąd jądra (Linuksa). Dają one obejście (zasadniczo odpowiednik Ctrl-C/Ctrl-Z), do użycia, jeśli zdemonizowałeś Serwer:

  1. kill-INT cat tmp/pids/server.pid
  2. kill-CONT cat tmp/pids/server.pid

Wydaje się, że powoduje to przetworzenie oryginalnego sygnału INT, możliwe, że pozwala na spłukiwanie danych i tak dalej.

 5
Author: jackr,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2012-06-12 02:26:07

Tutaj zostawiam funkcję Basha, która po wklejeniu do ciebie .bashrc lub .zshrc zrobi coś takiego:

rails start # To start the server in development environment
rails start production # To start the server in production environment
rails stop # To stop the server
rails stop -9 # To stop the server sending -9 kill signal
rails restart # To restart the server in development environment
rails restart production # To restart the server in production environment
rails whatever # Will send the call to original rails command

Oto Funkcja:

function rails() {
  if [ "$1" = "start" ]; then
     if [ "$2" = "" ]; then
        RENV="development"
     else
        RENV="$2"
     fi
     rails server -d -e "$RENV"
     return 0
  elif [ "$1" = "stop" ]; then
     if [ -f tmp/pids/server.pid ]; then
        kill $2 $(cat tmp/pids/server.pid)
        return 0
     else
        echo "It seems there is no server running or you are not in a rails project root directory"
        return 1
     fi
  elif [ "$1" = "restart" ]; then
     rails stop && rails start $2
  else
     command rails $@
  fi;
}

Więcej informacji w wpisie na blogu pisałem o tym.

 4
Author: Waiting for Dev...,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2014-05-27 08:38:30

Nie wydaje mi się, że jeśli użyjesz -d. po prostu zabiłbym proces.

W przyszłości po prostu otwórz inne okno terminala i użyj polecenia bez -d, które dostarcza naprawdę użytecznych wyników debugowania.

Jeśli jest to produkcja, użyj czegoś takiego jak passenger lub thin, aby mogli łatwo zatrzymać procesy lub ponownie uruchomić serwery

 3
Author: ,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2009-07-22 12:06:15
one-liner:  kill -INT `ps -e | grep ruby | awk '{print $1}'`

ps -e Lista wszystkich procesów w systemie
grep ruby wyszukuje wyjście dla procesu ruby
awk przekazuje pierwszy argument tego wyjścia (PID) do kill -INT.


spróbuj z echo zamiast kill, jeśli chcesz tylko zobaczyć PID.

 3
Author: billrichards,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2013-03-06 02:09:54

If kill pid not work then Usuń serwer plików.pid W MyRailsApp/tmp/pids /

 2
Author: SunTechnique,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2014-03-21 05:03:35

Przyszedłem tu, bo próbowałem (bezskutecznie) powstrzymać się od normalnego zabijania i myślałem, że zrobię coś złego.

Kill -9 to jedyny pewny sposób na zatrzymanie serwera ruby on rails? Co!? Wiesz, jakie są tego konsekwencje? To może być katastrofa...

 1
Author: FrameGrace,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2012-01-19 15:40:49

Możesz uruchomić serwer w tle dodając -d do polecenia. Na przykład:

puma -d

Aby go zatrzymać, po prostu zabij jakikolwiek proces uruchomiony na porcie 3000:

kill $(cat tmp/pids/server.pid)
 0
Author: Flavio Wuensche,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2018-08-23 15:44:10