Impossible d'arrêter le serveur de rails

126

Je suis nouveau sur les rails et j'utilise une machine ubuntu et l'IDE rubymine. Le problème est que je ne parviens pas à arrêter le serveur rails. J'ai essayé d'arrêter le serveur en tuant le processus de rails. Mais, lorsque je cours pgrep -l rails, aucun processus de ce type n'est trouvé. Donc, je ne peux tuer que les processus ruby, mais le serveur ne s'arrête pas.

J'ai essayé ./script/server stop(depuis que je l'ai commencé en courant ./script/server start), mais cela n'a pas fonctionné. En cherchant sur Google et en trouvant quelques messages stackoverflow, j'ai essayé de changer le port d'écoute du port localhost mais sans succès. Quelqu'un pourrait-il aider?

epsilones
la source
2
=> Ctrl-C pour arrêter le serveur
gabrielhilal
@Newben voulez-vous tuer tout le processus?
Apprenti
@Sri, oui je veux tuer tout le processus
epsilones
1
@Newben Vérifiez ma réponse mise à jour ci-dessous et essayez-le et faites-le moi savoir
Apprenant

Réponses:

303

Vous pouvez utiliser d'autres ports comme celui-ci:

rails server -p 3001

Normalement, dans votre terminal, vous pouvez essayer Ctrl + Cd'arrêter le serveur.

L'autre façon de tuer le serveur par défaut de Ruby on Rails (qui est WEBrick) est:

kill -INT $(cat tmp/pids/server.pid)

Dans votre terminal pour connaître le PID du processus:

$ lsof -wni tcp:3000

Ensuite, utilisez le nombre dans la colonne PID pour arrêter le processus:

Par exemple:

$ kill -9 PID

Et certaines des autres réponses que j'ai trouvées sont:

Pour arrêter le serveur de rails pendant son exécution, appuyez sur:

CTRL-C
CTRL-Z

Vous récupérerez le contrôle bash. Tapez ensuite (sans le $):

$ fg

Et cela retournera dans le processus, puis s'arrêtera Rails scorrectement.

C'est un peu ennuyeux, mais cela vaut certainement la peine de tuer le processus manuellement. Ce n'est pas trop mal et c'est le mieux que je puisse comprendre.

Réponse mise à jour:

Vous pouvez utiliser killall -9 railspour tuer toutes les applications en cours d'exécution avec " rails" dans le nom.

killall -9 rails

Apprenant
la source
Désolé, lsof -wni tcp: 3000 ne renvoie rien, et je n'ai pas de dossier tmp / pids /
epsilones
Si Webrick est en cours d'exécution, son PID est dans le {APP_ROOT}/tmp/pids/server.pidfichier afin que vous n'ayez pas à le rechercher - tant que le serveur est en cours d'exécution. Donc, si au lieu de le faire, ctrl-cexécutez simplement cette commande kill dans un autre terminal, cela tuera immédiatement le serveur Webrick.
Apprenti
Quand je lance des rails killall -9, je reçois le message disant "aucun processus de ce type n'a été trouvé" ??
epsilones
Btw, le dossier {APP_ROOT} / tmp / pids / existe effectivement mais il est vide
epsilones
1
Aucune de ces commandes n'a rien fait pour moi. Cependant, le redémarrage de la machine a résolu le problème.
Herb Meehan
51

vous pouvez utiliser la commande grep de la manière suivante,

ps aux | grep rails

puis

kill -9 {process_id} 
maximus ツ
la source
en fait, cette commnad n'attrape que '0:00 grep --color = auto rails', qui je suppose est la commande appelée grep ...
epsilones
Merci cette solution fonctionnant pour le serveur qui fonctionne toujours même la force terminale fermée. Nice
ksugiarto
Et si j'ai de nombreux processus et que je ne veux pas les tuer manuellement un par un?
Nickolay Kondratenko
Vous pouvez tous les tuer parkillall -9 rails
maximus ツ
pour trouver le serveur que je devais faireps aux | grep puma
Sami Birnbaum
27

pkill -9 rails pour tuer tout le processus des rails

Réponse mise à jour

ps aux|grep 'rails'|grep -v 'grep'|awk '{ print $2 }'|xargs kill -9

Cela tuera tout processus de rails en cours d'exécution. Remplacez «rails» par quelque chose d'autre pour tuer tous les autres processus.

Vasu Adari
la source
18

Voici les étapes pour tuer le processus du serveur:

1. lsof -i tcp:3000

2. kill -9 1234

1234est le PID du processus: localhost: 3000 affiché à l'étape 1.

OU

Supprimez le fichier (server.pid) sous Rails.root/tmp/pids/et redémarrez le serveur.

OU

ouvrez l'application dans un autre port en utilisant la commande:

rails s -p 3001

puneet18
la source
15

Sur mon MAC, le killall -9 railsne fonctionne pas. Mais le killall -9 rubyfait.

user2055780
la source
Même. C'est aussi la COMMANDvaleur.
IIllIIll
10

J'utilise généralement:

killall ruby

OU

pkill -9 ruby

qui va tuer tous les processus liés rubis qui sont en cours d' exécution comme rails server, rails console, etc.

Przbadu
la source
Si vous ne connaissez pas pkill -9 ou kill -9, il peut également être intéressant de noter que cela pourrait également tuer d'autres processus ruby, par exemple l'IDE rubymine.
Kjell
4

1. Supprimez simplement le fichier pid du répertoire de l'application rails

Rails_app -> tmp -> pids -> pid file

Supprimez le fichier et exécutez

rails start


2. Pour Rails 5.0 et supérieur, vous pouvez utiliser cette commande

rails restart

Aravin
la source
3

Utilisez ctrl+cpour arrêter votre serveur Webrick.

Malheureusement, si cela ne fonctionne pas, fermez le terminal de force et redémarrez-le.

Un autre truc est que

1. open your system-monitor(a gui application) on ubuntu

2. Select processes tab 

3. Then look for a process having name 'ruby'

4. End that process
Gopal S Rathore
la source
même u redémarré parfois le serveur est en cours d'exécution. Parce que nous devons tuer le temp / pid pour arrêter le serveur
apprenant
Mais normalement, terminer le terminal arrête le processus bcoz son processus de premier plan et s'exécute sur le terminal.
Gopal S Rathore
3

Supprimez le server.pid du dossier tmp / pids. Dans mon cas, l'erreur était: un serveur est déjà en cours d'exécution. Vérifiez /home/sbhatta/myapp/tmp/pids/server.pid.

Donc, je supprime server.pid

rm /home/sbhatta/myapp/tmp/pids/server.pid puis courir rails s

Santanu
la source
3

Étape 1: trouvez quels éléments consomment 3000 ports.

lsof -i:3000

étape 2: recherchez le processus nommé

Pour Mac

ruby      TCP localhost:hbci (LISTEN)

Pour Ubuntu

ruby      TCP *:3000 (LISTEN)

Étape 3: Trouvez le PID du processus et tuez-le.

kill -9 PID
errakeshpd
la source
2

Ctrl-Z devrait normalement faire l'affaire.

himanish.k
la source
2

J'ai utilisé killall -9 railscomme Sri l'a suggéré et cela n'a pas fonctionné. J'ai ajusté la commande killall -9 rubyet le serveur s'est fermé immédiatement.

Tl; dr: killall -9 ruby

Rebecca
la source
2

c'est aussi simple que

pkill -9 ruby

ni plus ni moins

Elta3lab
la source
1

Lorsque le serveur rails ne démarre pas, cela signifie qu'il est déjà en cours d'exécution, alors vous pouvez commencer en utilisant un nouveau port, par exemple.

rails s -p 3001

ou il démarre et s'arrête dans ce cas, vous souhaitez supprimer le dossier temporaire dans la structure de répertoires rails, il démarre le serveur rails.

Gajanan
la source
1

vérifiez le /tmp/tmp/server.pid

il y a un pid à l'intérieur.

Habituellement, je fais mal "kill -9 THE_PID" dans le cmd

Nich
la source
Je n'ai pas ce chemin, où pourrait-il être sur une machine ubuntu?
epsilones
il est caché ... allez dans le dossier de votre application, ctrl + H pour afficher vos fichiers cachés, puis vous pouvez le voir
Nich
1

J'ai remarqué sur Windows (j'utilise 10 mais je ne sais pas si c'est la même chose pour oler). Si vous utilisez cmd.exe et ctrl + c, le serveur raisl s'arrête correctement.

Cependant, si vous utilisez Git Bash, ce n'est pas le cas. Il dit que oui, mais quand vous regardez les pids tmp, c'est toujours là.

Peut-être un bug avec git bash?

Brad
la source
1

killall -9 rubyva tuer tous les processus ruby, et au moins sur ma machine, les serveurs rails apparaissent comme des processus ruby. killall -9 railsest beaucoup plus spécifique et ne fonctionne pas pour les anciennes versions de serveurs rails (cela donne un 'rails: aucun processus trouvé' car le processus s'appelle ruby)

J'ai rencontré ce problème il y a quelque temps. Après avoir soumis un formulaire dans activeadmin, le serveur rails vient de se bloquer et je n'ai pas pu le tuer en utilisant des moyens normaux (même après ctrl + z, il fonctionnait toujours en arrière-plan). La réponse de l'apprenant a aidé, mais cette commande n'a pas besoin d'ID de processus.

Somil Mishra
la source
0

Il est tard pour cette question. Voici mes 2 cents. J'ai fait une tâche de râteau pour arrêter le serveur lorsque je n'y ai pas accès. Je n'ai testé que sur Mac.

Avec cela, vous pouvez simplement l'ajouter à votre projet, puis exécuter la commande rake.

Voici:

Lien essentiel: -la dernière version sera ici. https://gist.github.com/houmanka/289184ca5d8d92de0499#file-server-rake

Un peu de code ici:

# Make a file under: `project_root/lib/tasks/server.rake`

# Then paste the following code

    namespace :server do
      desc "Stop the running server by killing the PID"
      task :kill do
        STDOUT.puts "Enter port number: "
        post_number = STDIN.gets.strip
        system "pid=$(lsof -i:#{post_number.to_i} -t); kill -TERM $pid || kill -KILL $pid"
      end
    end

# Then to use it in the terminal: `rake server:kill`
Monsieur H
la source
0

Assurez-vous également que vous exécutez la commande Cntrl + C dans le même terminal (onglet) que celui utilisé pour démarrer le serveur.

Dans mon cas, j'avais 2 onglets mais j'ai oublié d'arrêter le serveur de l'onglet correct et je me demandais pourquoi Cntrl + C ne fonctionne pas.

Cendre
la source
0

Un moyen très simple serait

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
0

Pour ma machine Windows 10, Ctrl - C+ Ctrl - Dfonctionne.

Ebran Khan
la source
0

Nous pouvons tuer la session de rails sous Linux en utilisant PORT no

fuser -k 3000/tcp 

ici 3000 est un port no. Maintenant, redémarrez votre serveur, vous verrez que votre serveur est en cours d'exécution.

Akash Jain
la source
0

Suivez ces étapes:

  1. ouvrez votre projet
  2. sélectionner dans le dossier tmp
  3. sélectionnez le dossier pids
  4. supprimer le fichier server.pid
  5. maintenant démarrez votre serveur rails
Krishna Singh Shahi
la source
N'a pas fonctionné sur mon application rails 5.2. Address already in use - bind(2) for "127.0.0.1" port 3000 (Errno::EADDRINUSE)
a.barbieri
0
  1. Ouvrez simplement le fichier en utilisant l'emplacement indiqué sudo vi /Users/user1/go/src/github.com/rails_app/rails_project/tmp/pids/server.pid

  2. recherchez le process_id / thread_id sur lequel le processus s'exécute.

  3. Tuez le processus / thread spécifié en utilisant kill -9 84699

Soumya Sengupta
la source
0

Sur rails 6 en utilisant

ps aux | grep rails ne renvoyait pas le processus serveur

je devais faire

ps aux | grep puma

pour trouver le processus réel, puis le tuer en utilisant

kill -9 {process_id}

Sami Birnbaum
la source
0

Si vous utilisez une version plus moderne de Rails et qu'elle utilise Puma comme serveur Web, vous pouvez exécuter la commande suivante pour trouver le processus Puma bloqué:

ps aux | grep puma

Il en résultera une sortie similaire à celle-ci:

85923 100.0  0.8  2682420 131324 s004  R+    2:54pm   3:27.92 puma 3.12.0 (tcp://0.0.0.0:3010) [my-app]
92463   0.0  0.0  2458404   1976 s008  S+    3:09pm   0:00.00 grep puma

Vous voulez le processus auquel il ne fait pas référence grep. Dans ce cas, l'ID de processus est 85923.

Je peux ensuite exécuter la commande suivante pour tuer ce processus:

kill -9 85923

entrez la description de l'image ici

Tina
la source