Rails Server kann nicht gestoppt werden

126

Ich bin neu in Schienen und benutze eine Ubuntu-Maschine und die Rubymin-IDE. Das Problem ist, dass ich den Rails-Server nicht stoppen kann. Ich habe versucht, den Server zu stoppen, indem ich den Rails-Prozess abgebrochen habe. Aber wenn ich laufe pgrep -l rails, wird kein solcher Prozess gefunden. Ich kann also nur Ruby-Prozesse beenden, aber der Server wird nicht gestoppt.

Ich habe es versucht ./script/server stop(seit ich mit dem Laufen angefangen habe ./script/server start), aber das hat nicht funktioniert. Ich googelte herum und fand einige Stackoverflow-Beiträge. Ich versuchte, den Überwachungsport des Localhost-Ports zu ändern, aber ohne Erfolg. Könnte jemand helfen?

Epsilone
quelle
2
=> Strg-C zum Herunterfahren des Servers
gabrielhilal
@ Newben willst du den ganzen Prozess beenden?
Lerner
@ Sri, ja, ich möchte den ganzen Prozess
beenden
1
@ Newben Überprüfen Sie meine aktualisierte Antwort unten und versuchen Sie es und lassen Sie es mich wissen
Lerner

Antworten:

303

Sie können andere Ports wie die folgenden verwenden:

rails server -p 3001

Normalerweise können Sie in Ihrem Terminal versuchen Ctrl + C, den Server herunterzufahren.

Die andere Möglichkeit, den Ruby on Rails-Standardserver (dh) zu beenden, WEBrickist:

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

In Ihrem Terminal, um die PID des Prozesses herauszufinden:

$ lsof -wni tcp:3000

Verwenden Sie dann die Nummer in der PID-Spalte, um den Prozess abzubrechen:

Beispielsweise:

$ kill -9 PID

Und einige der anderen Antworten, die ich gefunden habe, sind:

Um den Rails-Server während des Betriebs zu stoppen, drücken Sie:

CTRL-C
CTRL-Z

Sie erhalten die Kontrolle zurück zu bash. Geben Sie dann (ohne $) ein:

$ fg

Und dies wird wieder in den Prozess einfließen und dann Rails sordnungsgemäß beendet.

Es ist ein wenig nervig, aber das ist sicher besser als den Prozess manuell zu beenden. Es ist nicht schlecht und es ist das Beste, was ich herausfinden konnte.

Aktualisierte Antwort:

Sie können killall -9 railsalle laufenden Apps mit " rails" im Namen beenden.

killall -9 rails

Lerner
quelle
Sorry, lsof -wni tcp: 3000 gibt nichts zurück und ich habe keinen tmp / pids / Ordner
epsilones
Wenn Webrick ausgeführt wird, befindet sich die PID in der {APP_ROOT}/tmp/pids/server.pidDatei, sodass Sie nicht danach suchen müssen - solange der Server ausgeführt wird. Wenn ctrl-cSie also nicht nur diesen Befehl kill in einem anderen Terminal ausführen, wird der Webrick-Server sofort beendet.
Lerner
Wenn ich killall -9 Rails laufen lasse, erhalte ich die Meldung "Kein solcher Prozess gefunden"?
Epsilones
Übrigens existiert der Ordner {APP_ROOT} / tmp / pids / zwar, ist aber leer
epsilones
1
Keiner dieser Befehle hat etwas für mich getan. Durch einen Neustart des Computers wurde das Problem jedoch behoben.
Herb Meehan
51

Sie können den Befehl grep folgendermaßen verwenden:

ps aux | grep rails

und dann

kill -9 {process_id} 
maximus ツ
quelle
Tatsächlich fängt dieser Commnad nur '0:00 grep --color = auto rails', was wohl der grep ist, der Befehl genannt wird ...
epsilones
Dank dieser Lösung funktioniert sie für Server, auf denen auch das Terminal noch geschlossen ist. Nizza
ksugiarto
Und was ist, wenn ich viele Prozesse habe und sie nicht einzeln manuell beenden möchte?
Nickolay Kondratenko
Sie können sie alle töten biskillall -9 rails
maximus ツ
um den Server zu finden, den ich tun mussteps aux | grep puma
Sami Birnbaum
27

pkill -9 rails den ganzen Prozess der Schienen zu töten

Antwort aktualisiert

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

Dadurch wird jeder Laufschienenprozess beendet. Ersetzen Sie "Schienen" durch etwas anderes, um andere Prozesse zu beenden.

Vasu Adari
quelle
18

Im Folgenden finden Sie Schritte zum Beenden des Serverprozesses:

1. lsof -i tcp:3000

2. kill -9 1234

Wo 1234ist die PID des Prozesses: localhost: 3000 Anzeige in Schritt 1.

ODER

Entfernen Sie die Datei (server.pid) unter Rails.root/tmp/pids/und starten Sie den Server neu.

ODER

Öffnen Sie die App an einem anderen Port mit dem folgenden Befehl:

rails s -p 3001

puneet18
quelle
15

Auf meinem MAC killall -9 railsfunktioniert das nicht. Aber killall -9 rubytut es.

user2055780
quelle
Gleich. Das ist auch der COMMANDWert.
IIllIIll
10

Ich benutze im Allgemeinen:

killall ruby

ODER

pkill -9 ruby

welche alle Rubin bezogenen Prozesse töten , die wie laufen rails server, rails consoleusw.

przbadu
quelle
Wenn Sie pkill -9 oder kill -9 nicht kennen, ist es möglicherweise auch erwähnenswert, dass dies auch andere Ruby-Prozesse töten kann, beispielsweise die Rubymin-IDE.
Kjell
4

1. Löschen Sie einfach die PID-Datei aus dem Rails-App-Verzeichnis

Rails_app -> tmp -> pids -> pid file

Löschen Sie die Datei und führen Sie sie aus

rails start


2. Für Rails 5.0 und höher können Sie diesen Befehl verwenden

rails restart

Aravin
quelle
3

Verwenden ctrl+cSie diese Option, um Ihren Webrick-Server herunterzufahren.

Wenn dies leider nicht funktioniert, schließen Sie das Terminal mit Gewalt und starten Sie es neu.

Ein weiterer Trick ist das

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
Gopal S Rathore
quelle
Selbst wenn Sie manchmal neu gestartet werden, läuft der Server. Weil wir das Temp / Pid beenden müssen, um den Server zu stoppen
Learner
Normalerweise stoppt das Beenden des Terminals den Prozess aufgrund seines Vordergrundprozesses und wird auf dem Terminal ausgeführt.
Gopal S Rathore
3

Löschen Sie die Datei server.pid aus dem Ordner tmp / pids. In meinem Fall war der Fehler: Ein Server läuft bereits. Überprüfen Sie /home/sbhatta/myapp/tmp/pids/server.pid.

Also lösche ich server.pid

rm /home/sbhatta/myapp/tmp/pids/server.pid dann renne rails s

Santanu
quelle
3

Schritt 1: Finden Sie heraus, welche Elemente 3000 Port verbrauchen.

lsof -i:3000

Schritt 2: Suchen Sie den genannten Prozess

Für Mac

ruby      TCP localhost:hbci (LISTEN)

Für Ubuntu

ruby      TCP *:3000 (LISTEN)

Schritt 3: Finden Sie die PID des Prozesses und beenden Sie ihn.

kill -9 PID
errakeshpd
quelle
2

Strg-Z sollte normalerweise den Trick machen.

himanish.k
quelle
2

Ich habe killall -9 railswie von Sri vorgeschlagen verwendet und es hat nicht funktioniert. Ich habe den Befehl angepasst killall -9 rubyund der Server sofort geschlossen.

Tl; dr: killall -9 ruby

Rebecca
quelle
2

es ist so einfach wie

pkill -9 ruby

nicht mehr, nicht weniger

Elta3lab
quelle
1

Wenn der Rails-Server nicht gestartet wird, bedeutet dies, dass er bereits ausgeführt wird. Sie können dann mit einem neuen Port beginnen, z.

rails s -p 3001

oder es startet und stoppt in diesem Fall, wenn Sie den temporären Ordner in der Rails-Verzeichnisstruktur löschen möchten, startet es den Rails-Server.

Gajanan
quelle
1

Überprüfen Sie die Datei /tmp/tmp/server.pid

Da ist eine Pid drinnen.

Normalerweise mache ich "kill -9 THE_PID" im cmd

Nich
quelle
Ich habe diesen Pfad nicht, wo könnte er auf einer Ubuntu-Maschine sein?
Epsilones
es ist versteckt ... gehe zu deinem App-Ordner, Strg + H, um deine versteckten Dateien anzuzeigen, dann kannst du es sehen
Nich
1

Ich habe unter Windows bemerkt (ich benutze 10, bin mir aber nicht sicher, ob das auch für ältere gilt). Wenn Sie cmd.exe und Strg + c verwenden, stoppt der Raisl-Server korrekt.

Wenn Sie jedoch Git Bash verwenden, ist dies nicht der Fall. Es heißt, es hat, aber wenn man sich die tmp-Pids ansieht, ist es immer noch da.

Vielleicht ein Bug mit Git Bash?

Brad
quelle
1

killall -9 rubybeendet alle Ruby-Prozesse, und zumindest auf meinem Computer werden Rails-Server als Ruby-Prozesse angezeigt. killall -9 railsist viel spezifischer und funktioniert nicht für ältere Versionen von Rails-Servern (es gibt ein "Rails: kein Prozess gefunden", da der Prozess Ruby heißt)

Dieses Problem ist vor einiger Zeit aufgetreten. Nachdem ich ein Formular in activeadmin gesendet hatte, hing der Rails-Server einfach und ich konnte es nicht mit normalen Mitteln beenden (selbst nach Strg + Z lief es noch im Hintergrund). Die Antwort des Lernenden hat geholfen, aber dieser Befehl benötigt keine Prozess-ID.

Somil Mishra
quelle
0

Für diese Frage ist es spät. Hier sind meine 2 Cent. Ich habe eine Rechenaufgabe zum Stoppen des Servers erstellt, wenn ich keinen Zugriff darauf habe. Ich habe allerdings nur auf dem Mac getestet.

Mit diesem können Sie es einfach zu Ihrem Projekt hinzufügen und dann den Befehl rake ausführen.

Bitte schön:

Hauptlink: - Die neueste Version wird hier sein. https://gist.github.com/houmanka/289184ca5d8d92de0499#file-server-rake

Ein Code hier:

# 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`
Herr H.
quelle
0

Stellen Sie außerdem sicher, dass Sie den Befehl Cntrl + C im selben Terminal (Registerkarte) ausführen, mit dem der Server gestartet wird.

In meinem Fall hatte ich 2 Registerkarten, aber ich habe vergessen, den Server von der richtigen Registerkarte abzuhalten, und ich habe mich gefragt, warum Cntrl + C nicht funktioniert.

Asche
quelle
0

Ein super einfacher Weg wäre

gem install shutup

Gehen Sie dann in den aktuellen Ordner Ihres Rails-Projekts und führen Sie es aus

shutup # Dadurch wird der derzeit ausgeführte Rails-Prozess beendet

Sie können den Befehl 'shutup' jederzeit verwenden

DICLAIMER: Ich bin der Schöpfer dieses Edelsteins

HINWEIS: Wenn Sie rvm verwenden, installieren Sie den Edelstein global

rvm @global do gem install shutup
Lorenzo Sinisi
quelle
0

Für meine Windows 10-Maschine funktioniert Ctrl - C+ Ctrl - D.

Ebran Khan
quelle
0

Wir können die Rails-Sitzung unter Linux mit PORT-Nr

fuser -k 3000/tcp 

hier ist 3000 ein port nr. Starten Sie nun Ihren Server neu. Sie werden sehen, dass Ihr Server ausgeführt wird.

Akash Jain
quelle
0

Folge diesen Schritten:

  1. Öffnen Sie Ihr Projekt
  2. Wählen Sie im tmp-Ordner
  3. PID-Ordner auswählen
  4. Löschen Sie die Datei server.pid
  5. Starten Sie jetzt Ihren Rails-Server
Krishna Singh Shahi
quelle
Hat bei meiner Rails 5.2-Anwendung nicht funktioniert. Address already in use - bind(2) for "127.0.0.1" port 3000 (Errno::EADDRINUSE)
a.barbieri
0
  1. Öffnen Sie einfach die Datei an dem angegebenen Speicherort sudo vi /Users/user1/go/src/github.com/rails_app/rails_project/tmp/pids/server.pid

  2. Suchen Sie die Prozess-ID / Thread-ID, unter der der Prozess ausgeführt wird.

  3. Beenden Sie den angegebenen Prozess / Thread mit kill -9 84699

Soumya Sengupta
quelle
0

Auf Schienen 6 mit

ps aux | grep rails gab den Serverprozess nicht zurück

ich musste es tun

ps aux | grep puma

um den eigentlichen Prozess zu finden und ihn dann mit zu beenden

kill -9 {process_id}

Sami Birnbaum
quelle
0

Wenn Sie eine modernere Version von Rails verwenden und Puma als Webserver verwendet, können Sie den folgenden Befehl ausführen, um den feststeckenden Puma-Prozess zu finden:

ps aux | grep puma

Dies führt zu einer ähnlichen Ausgabe:

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

Sie möchten den Prozess, auf den sich nicht bezieht grep. In diesem Fall lautet die Prozess-ID 85923.

Ich kann dann den folgenden Befehl ausführen, um diesen Prozess abzubrechen:

kill -9 85923

Geben Sie hier die Bildbeschreibung ein

Tina
quelle