Le serveur fonctionne déjà dans Rails

137

Lorsque je démarre le serveur de rails à l'aide de la rails scommande, il s'afficheA server is already running. Check C:/Sites/folder/Pids/Server.pids

Lorsque j'ouvre le fichier, il génère un nombre à 4 chiffres uniquement, comment pourrais-je résoudre ce problème?

FYI

  1. Aucune autre instance de Rails cmd n'est en cours d'exécution cette fois.
  2. Vérifié le gestionnaire de tâches mais ne cmd.exemontre qu'aucun autre processus n'est en cours d'exécution. (sous Windows).
swapnesh
la source
1
Je supprime server.pid de \ tmp \ pids
user6746262

Réponses:

195

Supprimez le fichier: C: /Sites/folder/Pids/Server.pids

Explication Dans UNIX land au moins, nous suivons généralement l'ID de processus (pid) dans un fichier comme server.pid. Je pense que cela fait la même chose ici. Ce fichier a probablement été laissé par un crash.

Rainkinz
la source
5
ce que fait exactement ce fichier et la cause de cela ..pouvez-vous s'il vous plaît l'expliquer un peu plus :)
swapnesh
11
Désolé, j'aurais dû commenter davantage. Dans UNIX land au moins, nous suivons généralement l'identifiant du processus (pid) dans un fichier comme server.pid. Je pense que cela fait la même chose ici. Ce fichier a probablement été laissé par un crash.
rainkinz
Je pense que je l'ai cloné depuis Git, alors pensez-vous que cela pourrait être une cause? github.com/swapnesh/Add_twitter_bootstrap
swapnesh
1
Après avoir fait cela, je reçois toujours un "Port en cours d'utilisation" pour 3000. Quelqu'un sait-il comment je peux résoudre ce problème? Merci!
daveomcd
5
Exécutez netstat -a -oà une invite de commande pour voir quel processus utilise le port 3000
Rory
172

TL; DR Exécutez simplement cette commande pour le tuer

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

Cause fondamentale: Parce que PID est verrouillé dans un fichier et que le serveur Web pense que si ce fichier existe, cela signifie qu'il est déjà en cours d'exécution. Normalement, lorsqu'un serveur Web est fermé, ce fichier est supprimé, mais dans certains cas, la suppression correcte ne se produit pas, vous devez donc supprimer le fichier manuellement Nouvelles solutions

lorsque vous exécutez des rails s

=> Démarrer WEBrick

=> Application Rails 4.0.4 débutant en développement sur http://0.0.0.0:3000

=> Exécuter rails server -hpour plus d'options de démarrage

=> Ctrl-C pour arrêter le serveur

Un serveur est déjà en cours d'exécution. Vérifiez /your_project_path/tmp/pids/server.pid. Quitter

Placez donc votre chemin indiqué ici /your_project_path/tmp/pids/server.pid

et supprimez ce fichier server.pid :

rm /your_project_path/tmp/pids/server.pid

OU Si votre serveur a été détaché, suivez les instructions ci-dessous:

Si vous avez détaché votre serveur rails en utilisant la commande "rails -d" alors,

Supprimer les rails du serveur détaché à l'aide de la commande

ps -aef | grep rails

OU par cette commande

sudo lsof -wni tcp:3000

puis

kill -9 pID

OU utilisez cette commande

Pour rechercher et tuer le processus par nom de port sur lequel ce programme est en cours d'exécution. Pour 3000, remplacez le port sur lequel votre programme s'exécute.

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

Ancienne solution:

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

Vous pouvez également trouver cet article pour plus d'options Rails Update to 3.2.11 pauses exécutant plusieurs serveurs

Taimoor Changaiz
la source
car le PID est verrouillé dans le fichier et le serveur Web pense que si ce fichier existe, cela signifie qu'il est déjà en cours d'exécution. Normalement, lorsque le serveur Web est fermé, ce fichier est supprimé, mais dans certains cas, la suppression correcte ne se produit pas, vous devez donc supprimer le fichier manuellement
Taimoor Changaiz
Attention, cela tuera également votre navigateur s'il pointe vers: 3000!
Aeramor
1
solution parfaite poursudo kill -9 $(lsof -i :3000 -t)
new2cpp
84
lsof -wni tcp:3000

Ensuite, vous devriez voir le processus ruby ​​et vous pouvez exécuter

kill -9 processid

vous devriez être prêt à exécuter le processus maintenant

rails s thin

exécuter plusieurs processus ne semble pas être une bonne idée et d'après ce que j'ai lu, beaucoup de gens sont d'accord. J'ai malheureusement remarqué de nombreuses fuites de mémoire avec les rails, donc je ne pouvais pas imaginer avoir deux processus en cours d'exécution. Je sais qu'avec une heure supplémentaire, ma page s'actualise de plus en plus lentement en raison des données stockées en mémoire.

Josh Bedo
la source
27
kill -9 $(lsof -i tcp:3000 -t)
Karan Purohit
la source
2
@CalamityAdam Rails fonctionne généralement sur le port 3000. Il recherche les processus basés sur cela et obtient seulement le PID d'eux ( -toption), puis tue le processus par ce PID récupéré.
totymedli
13

Vous pouvez vous débarrasser du processus en le tuant:

kill -9 $(lsof -i tcp:3000 -t)
manu
la source
J'aime celui la. Nice et concis, mais complet. À votre santé.
LunaCodeGirl
11
$ lsof -wni tcp:3000

# Kill the running process
$ kill -9 5946

$ rm tmp/server.pids

contremaître démarrer etc démarrer le service

user1251378
la source
4

Cela se produit lorsque vous tuez votre processus serveur et que le fichier pid n'a pas été mis à jour. La meilleure solution consiste à supprimer le fichier Server.pid .

Utilisez la commande

rm <path to file Server.pid>

Ashish Sharma
la source
4

gem install shutup

puis allez dans le dossier actuel de votre projet rails et exécutez

shutup # cela tuera le processus Rails en cours d'exécution

Vous pouvez utiliser la commande 'shutup' à chaque fois que vous le souhaitez

DICLAIMER: Je suis le créateur de ce bijou

REMARQUE: si vous utilisez rvm, installez le gem globalement

rvm @global do gem install shutup
Lorenzo Sinisi
la source
3

Vous avez probablement suspendu le serveur par: ^Z .

Les quatre nombres numériques qui vim C:/Sites/folder/Pids/Server.pidssortent est l'identifiant du processus.

Vous devriez kill -9 processid, en remplaçant l'ID de processus par les 4 nombres que vim (ou un autre éditeur) a produit.

Tchérenkov
la source
Quelle est la bonne façon d'arrêter correctement le serveur? CTRL + C?
stt106
1

Si vous êtes sous Windows, il vous suffit de faire une seule étape en tant que «rails redémarrer» , puis de taper à nouveau «rails s». Vous êtes prêt à partir.

Alok Amme
la source
1

Sous Windows Rails 5.2, supprimez ce fichier

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

et courir

rails s

encore.

MSC
la source
1

Courir: fuser -k -n tcp 3000

Cela tuera le processus exécuté sur le port par défaut 3000.

Almawhoob
la source
0

Je viens d'avoir ce problème et j'ai essayé de le configurer sur un port différent, mais la seule chose que je devais faire était de supprimer mon [app_directory]/tmp/pids/server.pidet tout était prêt à partir.

Dakota Michael
la source
0

Courir:

dans Ubuntu / linux

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

Ou

 pkill -9 ruby

ou

lsof -wni tcp:3000

kill -9 pid
Syed Shibli
la source