..$ 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?
ruby-on-rails
ben
quelle
quelle
temp
Ordners kann Ihr Problem beheben.Antworten:
Sie können die
server.pid
Datei löschen .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)
quelle
Kurzer und knackiger einzeiliger Befehl, der sich darum kümmert.
kill -9 $(lsof -i tcp:3000 -t)
quelle
ruby
indemtop
ich die PIDkill -9 <PID>
server.pid
enthält nur die Prozess-ID des laufenden Servers.Wenn Sie tun:
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
rm
Befehl entfernenquelle
server.pid
von Backticks würde dazu führen, dass die Shell versucht, server.pid auszuführen, nicht wahr?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.pid
lokalen Computer löschen . Dann hat der Container / myapp diese Datei nicht.quelle
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-99988242Einfach:
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
quelle
Das Problem kann gelöst werden mit:
kill -9 $(more /home/..name/rprojects/railsapp/tmp/pids/server.pid)
quelle
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 dieserver.pid
Datei zu entfernen . Wenn Sie den Server dann erneut startenrails server
oderrails s
eine neue server.pid erstellen, können Sie die Entwicklung fortsetzen.quelle
die GUI-Art für Windows- Benutzer
Öffnen Sie den ResourceMonitor (Task-Manager -> Leistung -> ResourceMonitor) und beenden Sie den Prozess ruby.exe
quelle
Öffnen Sie die
path/to/your/rails/project/tmp/pids/server.pid
Datei.Kopieren Sie die Nummer, die Sie darin finden.
Lauf
kill -9 [PID]
Wo
[PID]
ist die Nummer, die Sie aus derserver.pid
Datei kopiert haben ?Dadurch wird der laufende Serverprozess beendet und Sie können Ihren Server problemlos erneut starten.
quelle
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.
quelle
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, wennrm
die 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.
quelle
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
quelle
Für dieses Problem
Was ich getan habe ist:
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
quelle
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.
quelle
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]
quelle
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
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!
quelle
LÖSUNG für Windows:
quelle
Für Ubuntu 20,
kill -9 $(ps -aef | grep rails)
quelle