web-dev-qa-db-fra.com

Impossible d'arrêter le serveur Rails

Je suis nouveau chez 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 Rails. Mais, lorsque je lance pgrep -l Rails, aucun processus de ce type n’est trouvé. Je ne peux donc tuer que les processus Ruby, mais le serveur ne s’arrête pas. 

J'ai essayé ./script/server stop (depuis que j'ai commencé en exécutant ./script/server start), mais cela n'a pas fonctionné. En cherchant sur Google et en recherchant des publications stackoverflow, j'ai essayé de changer le port d'écoute du port localhost, mais sans succès. Quelqu'un pourrait aider?

101
epsilones

Vous pouvez utiliser d'autres ports comme suit:

Rails server -p 3001

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

L’autre moyen de tuer le serveur par défaut de Ruby on Rails (WEBrick) est le suivant:

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

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

$ lsof -wni tcp:3000

Ensuite, utilisez le numéro dans la colonne PID pour tuer le processus:

Par exemple:

$ kill -9 PID

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

Pour arrêter le serveur Rails en cours d’exécution, appuyez sur:

CTRL-C
CTRL-Z

Vous aurez le contrôle à bash. Puis tapez (sans le $):

$ fg

Et cela reviendra dans le processus, puis quittera correctement le Rails s.

C'est un peu ennuyeux, mais cela vaut certainement mieux que de tuer le processus manuellement. Ce n'est pas si mal et c'est le meilleur que j'ai pu comprendre.

Réponse mise à jour:

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

killall -9 Rails 

246
Learner

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

ps aux | grep Rails

et alors

kill -9 {process_id} 
46
maximus ツ

pkill -9 Rails pour tuer tout le processus de Rails

Réponse mise à jour

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

Cela tuerait tout processus Rails en cours d'exécution. Remplacez 'Rails' par quelque chose d'autre pour tuer tout autre processus.

26
Vasu Adari

Sur mon MAC, le killall -9 Rails ne fonctionne pas. Mais killall -9 Ruby le fait.

11
user2055780

Voici les étapes pour tuer le processus serveur:

1. lsof -i tcp:3000

2. kill -9 1234

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

OR

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

OR

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

Rails s -p 3001

10
puneet18

J'utilise généralement: 

killall Ruby 

OR

pkill -9 Ruby 

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

9
przbadu

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

Rails_app -> tmp -> pids -> pid file

Supprimer le fichier et exécuter

Rails start


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

Rails restart

4
Aravin

Supprimez le fichier server.pid du dossier tmp/pids . Dans mon cas, l'erreur était la suivante: 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 exécutez Rails s

3
Santanu

Utilisez ctrl+c pour arrêter votre serveur Webrick.

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

Une autre astuce 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
3
Gopal S Rathore

J'ai utilisé killall -9 Rails comme suggéré par Sri et cela n'a pas fonctionné. J'ai ajusté la commande à killall -9 Ruby et le serveur s'est fermé immédiatement.

Tl; dr: killall -9 Ruby

2
Rebecca

Ctrl-Z devrait normalement faire l'affaire.

2
himanish.k

Étape 1: trouver quels sont les éléments qui consomment 3000 ports.

lsof -i:3000

étape 2: Trouver 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
2
errakeshpd

Lorsque le serveur Rails ne démarre pas, cela signifie qu'il est déjà en cours d'exécution, vous pouvez commencer par utiliser 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 de la structure de répertoires Rails il démarre le serveur Rails.

1
Gajanan

J'ai remarqué sur Windows (Im en utilisant 10, mais pas sûr si le même 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?

1
Brad

c'est aussi simple que 

pkill -9 Ruby

ni plus ni moins

0
Elta3lab

Suivez ces étapes:

  1. ouvrez votre projet
  2. sélectionner dans le dossier tmp
  3. sélectionner le dossier pids
  4. supprimer le fichier server.pid
  5. lancez maintenant votre Rails serveur
0
Krishna Singh Shahi

Pour ma machine Windows 10, Ctrl - C + Ctrl - D travaux.

0
Ebran Khan

Nous pouvons tuer la session Rails sur 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.

0
Akash Jain

Un moyen super facile serait

gem install shutup

puis allez dans le dossier actuel de votre projet Rails et lancez 

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

Vous pouvez utiliser la commande 'shutup' chaque fois que vous voulez

DICLAIMER: Je suis le créateur de ce joyau

REMARQUE: si vous utilisez rvm, installez la gem globalement 

rvm @global do gem install shutup
0
Lorenzo Sinisi

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

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

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

0
Nich

Il est tard pour cette question ... Voici mes 2 centimes. J'ai créé une tâche rake pour arrêter le serveur quand je n'y ai pas accès ..__ J'ai seulement testé sur Mac.

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

Voici: 

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

Quelques codes 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`
0
Mr H

Assurez-vous également que vous exécutez la commande Cntrl + C dans le même terminal (onglet) 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 Ctrl + C ne fonctionne pas.

0
Ash

killall -9 Ruby va tuer tous les processus Ruby, et au moins sur ma machine, les serveurs Rails apparaissent en tant que processus Ruby. killall -9 Rails est beaucoup plus spécifique et ne fonctionne pas pour les anciennes versions de serveurs Rails (il donne un message 'Rails: aucun processus trouvé' car le processus s'appelle Ruby)

Rencontré ce problème il y a un moment. Après avoir soumis un formulaire dans activeadmin, le serveur Rails s’est juste accroché et j’ai été incapable de le tuer avec des moyens normaux (même après ctrl + z, il était toujours en cours d’arrière-plan). La réponse de l'apprenant a aidé, mais cette commande n'a pas besoin d'identifiant de processus.

0
Somil Mishra