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

80
..$ rails s
=> Booting WEBrick
=> Rails 4.0.4 application starting in development on http://0.0.0.0:3000
=> Run `rails server -h` for more startup options
=> Ctrl-C to shutdown server
A server is already running. Check /home/..name/rprojects/railsapp/tmp/pids/server.pid.
Exiting

Was ist der einfachste Weg, dies für einen Rails-Anfänger zu lösen?

ben
quelle
Das Löschen des tempOrdners kann Ihr Problem beheben.
Shah

Antworten:

166

Sie können die server.pidDatei löschen .

rm /your_project_path/tmp/pids/server.pid

Sonst:

versuchen Sie es in OSX:

sudo lsof -iTCP -sTCP:LISTEN -P | grep :3000

oder unter Linux:

ps -aef | Grep Rails

oder

lsof -wni tcp:3000

Beenden Sie den Prozess mit

kill -9 PID (eg,2786)
ben
quelle
1
Nitpicking - aber ich denke du meinst OSX, nicht iOS. @SCraig Dies erfolgt in der Befehlszeile.
jmknoll
1
Ich habe die PID-Datei des Servers entfernt und hatte immer noch das Problem. Ein Neustart meines Systems war zwar nicht ideal, aber eine schnelle Lösung.
Matt
Lief wie am Schnürchen!
William Hampshire
Sir, wie kann ich das verhindern? Es passiert mir sehr oft, ich langweile mich, wenn ich die server.pid manuell entferne.
Umagon
129

Kurzer und knackiger einzeiliger Befehl, der sich darum kümmert.

kill -9 $(lsof -i tcp:3000 -t)
Karan Purohit
quelle
7
lol, möchten Sie vielleicht zuerst Ihren Browser-Tab schließen, wenn Sie ihn für localhost: 3000 geöffnet haben, andernfalls kann dies Ihren Browser töten
TMin
hat jemand versucht, dies als Alias ​​in zsh zu speichern und es funktioniert nicht?
Stackjlei
Manchmal wurde mein Server heruntergefahren, aber Ruby hat die CPU voll ausgelastet. Wenn dies der Fall ist, muss ich töten, rubyindem topich die PID kill -9 <PID>
bekomme
17

server.pid enthält nur die Prozess-ID des laufenden Servers.

Wenn Sie tun:

more /your_project_path/tmp/pids/server.pid

Sie erhalten eine Nummer (z. B. 6745), mit der Sie den vorherigen Server mit dem Befehl kill stoppen können:

kill -9 6745

und dann können Sie die Datei mit dem rmBefehl entfernen

rm /your_project_path/tmp/pids/server.pid
Muichkin
quelle
1
Das Einschließen server.pidvon Backticks würde dazu führen, dass die Shell versucht, server.pid auszuführen, nicht wahr?
mwfearnley
14

Wenn Sie docker-compose verwenden und in docker-compose.yml Folgendes haben: volumes: - .:/myapp Das bedeutet, dass Ihr lokaler Arbeitsbereich dem Ordner / myapp des Containers zugeordnet ist.

Alles in / myapp wird für die definierten Volumes nicht gelöscht.

Sie können auf Ihrem ./tmp/pids/server.pidlokalen Computer löschen . Dann hat der Container / myapp diese Datei nicht.

Fahrbahn
quelle
4
Sie können diese Datei auch einfach bei jedem Container-Start automatisch löschen : command: bash -c "rm -f tmp/pids/server.pid && bundle exec rails s -p 3000 -b '0.0.0.0'". Refs: github.com/docker/compose/issues/1393#issuecomment-99988242
leymannx
12

Einfach:

Gehen Sie in diesem Fall in den Stammordner des Projekts und führen Sie Folgendes aus:

gem install shutup
shutup

Dadurch wird der aktuell ausgeführte Prozess gefunden, beendet und die PID-Datei bereinigt

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

rvm @global do gem install shutup
Lorenzo Sinisi
quelle
5

Das Problem kann gelöst werden mit:

kill -9 $(more /home/..name/rprojects/railsapp/tmp/pids/server.pid)
webster
quelle
5

Dies geschieht manchmal, weil Sie den Server gewaltsam ausschalten, z. B. indem Sie das Betriebssystem / den Computer manuell ausschalten, damit der Server nicht genügend Zeit hat, sich bei server.pid anzumelden.

Eine einfache Möglichkeit besteht darin, manuell zu tmp/pids/(dem Verzeichnis, das in Ihrer Konsole angezeigt wird) zu wechseln und die server.pidDatei zu entfernen . Wenn Sie den Server dann erneut starten rails serveroder rails seine neue server.pid erstellen, können Sie die Entwicklung fortsetzen.

Drachenritter
quelle
3

die GUI-Art für Windows- Benutzer

Öffnen Sie den ResourceMonitor (Task-Manager -> Leistung -> ResourceMonitor) und beenden Sie den Prozess ruby.exe

Geben Sie hier die Bildbeschreibung ein

Alexander Sidikov Pfeif
quelle
3

Öffnen Sie die path/to/your/rails/project/tmp/pids/server.pidDatei.

Kopieren Sie die Nummer, die Sie darin finden.

Lauf kill -9 [PID]

Wo [PID]ist die Nummer, die Sie aus der server.pidDatei kopiert haben ?

Dadurch wird der laufende Serverprozess beendet und Sie können Ihren Server problemlos erneut starten.

Daniel Okwufulueze
quelle
3

Beenden Sie server.pid mit dem folgenden Befehl:

kill -9 `cat /root/myapp/tmp/pids/server.pid`

Hinweis: Verwenden Sie den Pfad server.pid, der in der Konsole / im Terminal angezeigt wird.

Vielen Dank.

Rahul2692
quelle
3

Weitere Informationen finden Sie im Kontext der Ausführung der Anwendung im Docker.

In der Datei docker-compose.yml können Sie unter dem Anwendungscontainer selbst eine der folgenden Optionen verwenden:

command: ["rm /your-app-path/tmp/pids/server.pid && bundle exec bin/rails s -p 3000 -b '0.0.0.0'"]

oder

command: ["rm /your-app-path/tmp/pids/server.pid; foreman start"]

Beachten Sie die Verwendung von entweder ;oder &&, die &&ein Exit-Signal sendet, wenn rmdie Datei nicht gefunden wird, wodurch Ihr Container vorzeitig gestoppt wird. Die Verwendung ;wird weiterhin ausgeführt.

Warum wird das überhaupt verursacht? Das Grundprinzip ist, dass, wenn der Server (puma / thin / Whatever) nicht sauber beendet wird, eine PID auf dem Host-Computer verbleibt, die einen Beendigungsfehler verursacht.

Um die Portabilität zu gewährleisten, anstatt die Datei auf dem Hostsystem manuell zu löschen, sollten Sie überprüfen, ob die Datei in einer Skriptdatei vorhanden ist oder die Datei selbst erstellt.

Jimmy MG Lim
quelle
3

Zuerst PID # suchen - wo der Rails Server hängen geblieben ist

Führen Sie dies aus, um die feststeckende PID zu finden

cat ./tmp/pids/server.pid

Es wird so etwas wie zurückgeben 65829

Dann TÖTE diese PID =>kill 65829

jso1919
quelle
0

Für dieses Problem

Was ich getan habe ist:

  • Löschen Sie den Ordner Pids, der sich unter befindet app/tmp/
  • Schließen Sie dann das Terminal, auf dem die aktuelle App ausgeführt wird, und schließen Sie die Registerkarte (im Browserfenster).

  • Öffnen Sie danach das Terminal erneut, indem Sie in den Ordner gehen, und führen Sie dann Folgendes aus: rails s

  • Anschließend wird die neue Registerkarte geöffnet, auf der unsere Anwendung ausgeführt wird
sowmya
quelle
0

Kopieren Sie zuerst die Cumber in die Datei und entfernen Sie sie dann: rm /your_project_path/tmp/pids/server.pid. Erstellen Sie sie dann erneut. touch /YOUR_PROJECT_PATH/tmp/pids/server.pid Es hat bei mir funktioniert.

Mounaim
quelle
0

Führen Sie den folgenden Befehl auf dem Terminal aus (nur für Linux).

ps aux | grep rails

und dann

kill -9 [pid]

Ein anderer Weg

lsof -wni tcp:3000

und dann

kill -9 [PID]
Arvind singh
quelle
0

LÖSEN

Bereits verwendete Adresse - bind (2) ”500-Fehler in Ruby on Rails

Kürzlich habe ich versucht, eine Rails-App auf einem Produktionsserver auszuführen. Es hat nicht nur nicht funktioniert, sondern auch meinen localhost: 3000-Entwicklungsserver kaputt gemacht. Localhost würde nur eine leere weiße Seite oder einen 500-Fehler laden.

Um dies zu lösen, habe ich zwei Schnellbefehle verwendet. Wenn diese kein Ergebnis zurückgeben, müssen Sie möglicherweise anderswo nach einer Lösung suchen, dies ist jedoch eine gute schnelle Lösung.

lsof -wni tcp: 3000

ruby 52179 rachelchervin 50u IPv6 0x ... 7aa3 0t0 TCP [:: 1]: hbci (HÖREN)
ruby 52179 rachelchervin 51u IPv4 0x ... c7bb 0t0 TCP 127.0.0.1:hbci (HÖREN)
ruby 52180 rachelchervin 50u IPv6 0x ... 7aa3 0t0 TCP [:: 1]: hbci (HÖREN)
ruby 52180 rachelchervin 51u IPv4 0x ... c7bb 0t0 TCP 127.0.0.1:hbci (HÖREN)

Dieser Befehl zeigt alle meine aktuell ausgeführten Prozesse und ihre PIDs (Prozess-IDs) am 3000-Port an. Da es laufende Prozesse gibt, die nicht korrekt geschlossen wurden, kann mein neuer: 3000-Server nicht gestartet werden, daher der 500-Fehler.

töte 52179

töte 52180

Schienen s

Ich habe den Linux-Befehl kill verwendet, um die fehlerhaften Prozesse manuell zu stoppen. Wenn Sie mehr als 4 haben, verwenden Sie einfach kill für alle PIDs, bis der erste Befehl leer ist. Versuchen Sie dann erneut, Ihren localhost: 3000-Server neu zu starten. Dadurch wird Ihr Computer nicht beschädigt! Bestehende Ruby-Prozesse auf Ihrem Localhost-Port werden einfach beendet. Ein neuer Server startet diese Prozesse erneut. Viel Glück!

Thomas
quelle
0

LÖSUNG für Windows:

  1. Siehe die PID aus \ tmp \ pids \ server.pid
  2. Öffnen Sie cmd als Administrator
  3. Taskkill / F / PID [PID aus Schritt 1.]
  4. Löschen Sie die Datei server.pid
  5. Server neu starten
Tanay Burreja
quelle
0

Für Ubuntu 20, kill -9 $(ps -aef | grep rails)

Riddhi
quelle