2013-01-09 10 views
7

Wenn ich versuche, einen Server über rails s zu starten, ich die folgende Fehlermeldung erhalten:Wie töte ich einen rails webrick Server?

C:\Users\Frankie\Documents\stocktracker>rails s 
=> Booting WEBrick 
=> Rails 3.2.8 application starting in development on http://0.0.0.0:3000 
=> Call with -d to detach 
=> Ctrl-C to shutdown server 
A server is already running. Check C:/Users/Frankie/Documents/stocktracker/tmp/p 
ids/server.pid. 
Exiting 

Die Zahl aufgelistet in server.pid ist 8436.

Wie manuell töten ich diesen Prozess? Wie kann ich alle derzeit laufenden Webrick-Server einfach ausschalten?

+0

Ich glaube, dass Nachricht nur anzeigt, dass ein anderer Prozess an Port 3000 gebunden ist. Nicht unbedingt ein anderer WEBrick-Prozess. Ich denke, dieses Dienstprogramm wird Ihnen helfen, zu finden, die TCP-Port-Prozesse sind zuhören: http://technet.microsoft.com/en-us/sysinternals/bb896653.aspx (es ist eine Weile her, seit ich an Windows gearbeitet habe) – Brian

+0

kill -INT $ (cat tmp/pids/server.pid) [siehe hier] [1] [1]: http://stackoverflow.com/questions/15088163/cant-stop- rails-server # antwort-15088254 – montells

Antwort

11

Sie können das Dienstprogramm taskkill verwenden.

taskkill /PID 8436 
+0

Ich habe das schon probiert, aber anscheinend war der Prozess nicht vorhanden. 'FEHLER: Der Prozess" 8436 "wurde nicht gefunden. – fbonetti

+6

Dann ist es möglich, dass der Prozess bereits beendet ist und seine PID-Datei nicht bereinigt werden konnte. Ich würde die PID-Datei manuell löschen und es erneut versuchen. –

+2

Ja, löschte die PID-Datei den Trick. Vielen Dank! – fbonetti

0

Die folgende Aufgabendefinition funktioniert für mich (steckte es in eine * .rake-Datei in Ihrem Ordner lib \ tasks):

namespace :server do 

    # --------------------------------------------------------------------------- 
    desc "Clear the previous server instance clutter." 
    task :cleanup => :environment do  
    pidfile = 'tmp/pids/server.pid' 
    if File.exists? pidfile 
     pid = File.read(pidfile).to_i 
     if RbConfig::CONFIG['host_os'] =~ /mswin32/ 
     sh "taskkill /f /pid #{pid}" 
     sh "del tmp\\pids\\server.pid" 
     else 
     sh "kill #{pid}" 
     sh "rm #{pidfile}" 
     end 
     puts "All cleaned up. Yay!" 
    else 
     puts "Already clean. Whew!" 
    end 
    end 
    # --------------------------------------------------------------------------- 
    desc "Start an instance of the server cleanly." 
    task :startup => :cleanup do 
    sh "rails server" 
    end 
    # --------------------------------------------------------------------------- 
end 

Jetzt laufen nur

rake server:startup 

Es reinigt Alle übrig gebliebenen Prozesse und PID-Dateien auf Windoze, bevor Sie versuchen, den Rails-Server erneut auszuführen.

1

Wenn Sie iTerm2 unter OSX verwenden, können Sie Toolbelt => ShowToolbelt öffnen, ruby ​​pid 8436 auswählen und dann auf send signal klicken, um es zu beenden. Gelegentlich funktioniert Task-Tötung nicht für mich.

Sie können auch ps -aux | grep rails die PID finden. und dann töten wie die anderen Antworten empfehlen.

0

Für Linux/Ubuntu Benutzer hat ubuntu Befehl Kill. Beim Ausführen des Servers werden im Projektverzeichnis innerhalb des Verzeichnisses APP_DIR/tmp/pids/server.pid alle Prozess-IDs gespeichert.
Sie müssen nur die Datei öffnen, finden Sie die Prozess-ID des aktuell laufenden Servers. Jetzt können Sie den folgenden Befehl verwenden, um den Prozess zu töten

$ kill [pid] # Example kill 8123 
+0

für weitere Informationen: https://cbabhusal.wordpress.com/2015/02/03/forcefully-kill-webrick-instance-in-ubuntu-and -windows/ – illusionist

-2

folgenden Schritte aus:

1.Suchen 'Schienen s' Prozess-ID von: ps -aux | grep Schienen

2.Use töten Befehl mit -9 Option: töten -p [PID]

Sie werden nicht enttäuscht sein !!

+0

Sollte das kill -9 [PID] sein? Das -p hat nicht funktioniert ... – mack

+0

Diese Antwort funktioniert nicht unter Windows. –

Verwandte Themen