Der Server läuft bereits in Rails

136

Wenn ich den Rails-Server mit dem rails sBefehl starte, wird er angezeigtA server is already running. Check C:/Sites/folder/Pids/Server.pids

Wenn ich die Datei öffne, wird nur eine 4-stellige Nummer ausgegeben. Wie kann ich dieses Problem beheben?

Zu Ihrer Information

  1. Diesmal wird keine andere Instanz von Rails cmd ausgeführt.
  2. Überprüfter Task-Manager zeigt jedoch nur an, cmd.exedass kein anderer Prozess ausgeführt wird. (unter Windows).
Swapnesh
quelle
1
Ich entferne server.pid von \ tmp \ pids
user6746262

Antworten:

195

Entfernen Sie die Datei: C: /Sites/folder/Pids/Server.pids

Erläuterung Zumindest in UNIX-Ländern verfolgen wir normalerweise die Prozess-ID (pid) in einer Datei wie server.pid. Ich denke, das macht hier das Gleiche. Diese Datei wurde wahrscheinlich von einem Absturz übrig gelassen.

rainkinz
quelle
5
Was genau diese Datei tun und dafür verursachen ..können Sie es bitte etwas näher erläutern :)
Swapnesh
11
Entschuldigung, ich hätte weiter kommentieren sollen. Zumindest in UNIX-Ländern verfolgen wir normalerweise die Prozess-ID (pid) in einer Datei wie server.pid. Ich denke, das macht hier das Gleiche. Diese Datei wurde wahrscheinlich von einem Absturz übrig gelassen.
Rainkinz
Ich glaube, ich habe es von Git geklont. Glaubst du, es könnte eine Ursache sein? github.com/swapnesh/Add_twitter_bootstrap
swapnesh
1
Danach bekomme ich immer noch einen "Port in Verwendung" für 3000. Weiß jemand, wie ich das beheben kann? Vielen Dank!
Daveomcd
5
Führen Sie netstat -a -oan einer Eingabeaufforderung aus, um zu sehen, welcher Prozess Port 3000 verwendet
Rory
171

TL; DR Führen Sie einfach diesen Befehl aus, um ihn zu beenden

sudo kill -9 $(lsof -i :3000 -t)

Grundursache: Da die PID in einer Datei gesperrt ist und der Webserver der Ansicht ist, dass diese Datei bereits ausgeführt wird, bedeutet dies, dass sie bereits ausgeführt wird. Wenn ein Webserver geschlossen wird, wird diese Datei normalerweise gelöscht. In einigen Fällen erfolgt jedoch kein ordnungsgemäßes Löschen, sodass Sie die Datei manuell entfernen müssen. Neue Lösungen

wenn Sie Schienen laufen s

=> WEBrick booten

=> Rails 4.0.4 Anwendung beginnt in der Entwicklung am http://0.0.0.0:3000

=> rails server -hFür weitere Startoptionen ausführen

=> Strg-C zum Herunterfahren des Servers

Ein Server läuft bereits. Überprüfen Sie /your_project_path/tmp/pids/server.pid. Verlassen

Platzieren Sie also Ihren hier gezeigten Pfad /your_project_path/tmp/pids/server.pid

und entfernen Sie diese server.pid- Datei:

rm /your_project_path/tmp/pids/server.pid

ODER Wenn Ihr Server getrennt wurde, befolgen Sie die folgenden Richtlinien:

Wenn Sie Ihren Rails-Server mit dem Befehl "Rails -d" getrennt haben, dann

Entfernen Sie den vom Schienen getrennten Server mit dem Befehl

ps -aef | grep rails

ODER durch diesen Befehl

sudo lsof -wni tcp:3000

dann

kill -9 pID

ODER verwenden Sie diesen Befehl

Suchen und Beenden des Prozesses anhand des Portnamens, auf dem das Programm ausgeführt wird. Bei 3000 ersetzen Sie den Port, auf dem Ihr Programm ausgeführt wird.

sudo kill -9 $(lsof -i :3000 -t)

Alte Lösung:

rails s -p 4000 -P tmp/pids/server2.pid

In diesem Beitrag finden Sie weitere Optionen. Rails Update auf 3.2.11 unterbricht die Ausführung mehrerer Server

Taimoor Changaiz
quelle
Da die PID in der Datei gesperrt ist und der Webserver der Ansicht ist, dass diese Datei bereits ausgeführt wird, bedeutet dies, dass sie bereits ausgeführt wird. Normalerweise wird diese Datei gelöscht, wenn der Webserver geschlossen wird. In einigen Fällen erfolgt jedoch kein ordnungsgemäßes Löschen, sodass Sie die Datei manuell entfernen müssen
Taimoor Changaiz,
Vorsicht, dies wird auch Ihren Browser töten, wenn er auf 3000 zeigt!
Aeramor
1
perfekte Lösung fürsudo kill -9 $(lsof -i :3000 -t)
new2cpp
84
lsof -wni tcp:3000

Dann sollten Sie den Ruby-Prozess sehen und können laufen

kill -9 processid

Sie sollten jetzt gut darin sein, den Prozess auszuführen

rails s thin

Das Ausführen mehrerer Prozesse scheint keine gute Idee zu sein, und nach dem, was ich gelesen habe, stimmen viele Menschen zu. Ich habe leider viele Speicherlecks mit Schienen bemerkt, daher konnte ich mir nicht vorstellen, dass zwei Prozesse ausgeführt werden. Ich weiß, dass meine Seitenaktualisierungen mit einer Überstundenzeit aufgrund der im Speicher gespeicherten Daten zunehmend langsamer werden.

Josh Bedo
quelle
27
kill -9 $(lsof -i tcp:3000 -t)
Karan Purohit
quelle
2
@CalamityAdam Rails wird normalerweise auf Port 3000 ausgeführt. Er sucht danach nach Prozessen und erhält nur die PID von ihnen ( -tOption) und beendet den Prozess dann anhand dieser abgerufenen PID.
Totymedli
13

Sie können den Prozess loswerden, indem Sie ihn beenden:

kill -9 $(lsof -i tcp:3000 -t)
manu
quelle
Ich mag diesen. Schön und prägnant, aber vollständig. Prost.
LunaCodeGirl
11
$ lsof -wni tcp:3000

# Kill the running process
$ kill -9 5946

$ rm tmp/server.pids

Vorarbeiter starten usw. Starten Sie den Dienst

user1251378
quelle
4

Dies geschieht, wenn Sie Ihren Serverprozess beenden und die PID-Datei nicht aktualisiert wurde. Die beste Lösung besteht darin, die Datei Server.pid zu löschen .

Verwenden Sie den Befehl

rm <path to file Server.pid>

Ashish Sharma
quelle
4

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
3

Wahrscheinlich haben Sie den Server angehalten durch: ^Z .

Die vier digitalen Zahlen, die vim C:/Sites/folder/Pids/Server.pidsausgegeben werden, sind die Prozess-ID.

Sie sollten kill -9 processiddie Prozess-ID durch die 4 von vim (oder einem anderen Editor) ausgegebenen Zahlen ersetzen.

Cherenkov
quelle
Was ist der richtige Weg, um den Server richtig zu stoppen? STRG + C?
stt106
1

Wenn Sie unter Windows arbeiten, müssen Sie nur einen Schritt ausführen, um die Schienen neu zu starten. Geben Sie dann erneut "Schienen s" ein. Sie können loslegen.

Alok Amme
quelle
1

Löschen Sie diese Datei unter Windows Rails 5.2

c:/Sites/<your_folder>/tmp/pids/server.pid

und Renn

rails s

nochmal.

MSC
quelle
1

Lauf: fuser -k -n tcp 3000

Dadurch wird der Prozess beendet, der am Standardport 3000 ausgeführt wird.

Almawhoob
quelle
0

Ich hatte gerade dieses Problem und habe versucht, es auf einen anderen Port einzustellen, aber das einzige, was ich tun musste, war, meinen zu löschen, [app_directory]/tmp/pids/server.pidund alles war in Ordnung.

Dakota Michael
quelle
0

Lauf:

in Ubuntu / Linux

 sudo rm /var/www/html/rails/WBPOCTEST/tmp/pids/server.pid

Oder

 pkill -9 ruby

oder

lsof -wni tcp:3000

kill -9 pid
Syed Shibli
quelle