Impossibile arrestare il server rails


126

Sono nuovo su Rails e sto usando una macchina Ubuntu e l'IDE rubymine. Il problema è che non riesco a fermare il server rails. Ho provato a fermare il server uccidendo il processo delle rotaie. Ma, quando corro pgrep -l rails, non viene trovato alcun processo. Quindi, sono solo in grado di uccidere i processi ruby, ma il server non si fermerà.

Ho provato ./script/server stop(da quando l'ho avviato eseguendo ./script/server start), ma non ha funzionato. Cercando su Google e trovando alcuni post di stackoverflow, ho provato a cambiare la porta di ascolto della porta localhost ma senza successo. Qualcuno potrebbe aiutare?


2
=> Ctrl-C per
arrestare il

@Newben vuoi uccidere tutto il processo?
Studente il

@Sri, sì, voglio uccidere tutto il processo
epsilones,

1
@Newben Controlla la mia risposta aggiornata qui sotto e prova e fammi sapere
Apprendente il

Risposte:


303

Puoi usare altre porte come la seguente:

rails server -p 3001

Normalmente nel tuo terminale puoi provare Ctrl + Ca spegnere il server.

L'altro modo per uccidere il server predefinito di Ruby on Rails (che è WEBrick) è:

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

Nel tuo terminale per scoprire il PID del processo:

$ lsof -wni tcp:3000

Quindi, utilizzare il numero nella colonna PID per terminare il processo:

Per esempio:

$ kill -9 PID

E alcune delle altre risposte che ho trovato è:

Per arrestare il server rails mentre è in esecuzione, premere:

CTRL-C
CTRL-Z

Riceverai il controllo su bash. Quindi digitare (senza il $):

$ fg

E questo tornerà nel processo e poi si chiuderà Rails scorrettamente.

È un po 'fastidioso, ma questo sicuramente batte uccidere il processo manualmente. Non è poi così male ed è il migliore che ho potuto capire.

Risposta aggiornata:

Puoi usare killall -9 railsper uccidere tutte le app in esecuzione con " rails" nel nome.

killall -9 rails


Siamo spiacenti, lsof -wni tcp: 3000 non restituisce nulla e non ho alcuna cartella tmp / pids /
epsilones,

Se Webrick è in esecuzione, il suo PID è in {APP_ROOT}/tmp/pids/server.pidarchivio, quindi non è necessario cercarlo, purché il server sia in esecuzione. Quindi, se invece di farlo ctrl-cesegui quel comando kill in un altro terminale, ucciderà immediatamente il server Webrick.
Studente il

Quando eseguo killall -9 rails, ricevo il messaggio che dice "non è stato trovato nessun processo di questo tipo" ??
epsilones,

A proposito, la cartella {APP_ROOT} / tmp / pids / esiste davvero ma è vuota
epsilones,

1
Nessuno di questi comandi ha fatto nulla per me. Tuttavia, il riavvio del computer ha risolto il problema.
Herb Meehan,

51

puoi usare il comando grep nel modo seguente,

ps aux | grep rails

e poi

kill -9 {process_id} 

in realtà, questo commnad cattura solo '0:00 grep --color = rotaie automatiche', che immagino sia il grep chiamato comando ...
epsilones,

Grazie a questa soluzione funzionante per server che eseguono ancora anche la forza terminale chiusa. Bello
ksugiarto

E se avessi molti processi e non volessi ucciderli manualmente uno per uno?
Nickolay Kondratenko,

Puoi ucciderli tutti entro ilkillall -9 rails
maximus ツ

per trovare il server che dovevo fareps aux | grep puma
Sami Birnbaum,

27

pkill -9 rails per uccidere tutto il processo di rotaie

Risposta aggiornata

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

Questo ucciderà qualsiasi processo di binari in esecuzione. Sostituisci i "binari" con qualcos'altro per uccidere qualsiasi altro processo.


18

Di seguito sono riportati i passaggi per terminare il processo del server:

1. lsof -i tcp:3000

2. kill -9 1234

dov'è 1234il PID del processo: localhost: 3000 display al punto 1.

O

Rimuovere il file (server.pid) in Rails.root/tmp/pids/e riavviare il server.

O

apri l'app in un'altra porta usando il comando:

rails s -p 3001


15

Sul mio MAC il killall -9 railsnon funziona. Ma lo killall -9 rubyfa.


Stesso. Questo è anche il COMMANDvalore.
IIllIIll

10

In genere utilizzo:

killall ruby

O

pkill -9 ruby

che ucciderà tutti i processi relativi rubino che eseguono come rails server, rails consoleecc


Se non conosci pkill -9 o uccidi -9, potrebbe anche valere la pena notare che questo potrebbe uccidere anche altri processi di rubino, ad esempio l'IDE di rubimmina.
Kjell

4

1. Basta eliminare il file pid dalla directory dell'app rails

Rails_app -> tmp -> pids -> pid file

Elimina il file ed esegui

rails start


2. Per Rails 5.0 e versioni successive, è possibile utilizzare questo comando

rails restart


3

Utilizzare ctrl+cper spegnere il server Webrick.

Sfortunatamente se non funziona, chiudere con forza il terminale e riavviarlo.

Un altro trucco è quello

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

anche se hai riavviato a volte il server è in esecuzione. Perché dobbiamo interrompere temp / pid per arrestare il server
Learner,

Ma normalmente, terminare il terminale interrompe il processo perché il suo processo in primo piano e viene eseguito sul terminale.
Gopal S Rathore,

3

Elimina il server.pid dalla cartella tmp / pids. Nel mio caso, l'errore era: un server è già in esecuzione. Controlla /home/sbhatta/myapp/tmp/pids/server.pid.

Quindi, elimino server.pid

rm /home/sbhatta/myapp/tmp/pids/server.pid quindi corri rails s


3

Passaggio 1: trova quali sono gli elementi che consumano 3000 porte.

lsof -i:3000

passaggio 2: trova il processo denominato

Per Mac

ruby      TCP localhost:hbci (LISTEN)

Per Ubuntu

ruby      TCP *:3000 (LISTEN)

Passaggio 3: trova il PID del processo e uccidilo.

kill -9 PID


2

Ho usato killall -9 railscome ha suggerito Sri e non ha funzionato. Ho regolato il comando su killall -9 rubye il server si è chiuso immediatamente.

Tl; dr: killall -9 ruby


2

è semplice come

pkill -9 ruby

niente di più, niente di meno


1

Quando il server rails non si avvia, significa che è già in esecuzione, quindi è possibile iniziare utilizzando una nuova porta, ad es.

rails s -p 3001

oppure si avvia e si interrompe in quel caso si desidera eliminare la cartella temporanea nella struttura di directory di rails che avvia il server di rails.


1

controlla il /tmp/tmp/server.pid

c'è un pid dentro.

Di solito, faccio male "kill -9 THE_PID" nel cmd


Non ho questo percorso, dove potrebbe essere su una macchina Ubuntu?
epsilones,

è nascosto ... vai nella cartella della tua app, ctrl + H per mostrare i tuoi file nascosti, quindi puoi vederlo
Nich

1

Ho notato su Windows (sto usando 10 ma non sono sicuro se lo stesso per Oler). Se si utilizzano cmd.exe e ctrl + c, il server raisl si arresta correttamente.

Tuttavia, se usi Git Bash, non lo fa. Dice di sì, ma quando guardi i pid di tmp, è ancora lì.

Forse un bug con git bash?


1

killall -9 rubyucciderà tutti i processi ruby ​​e, almeno sulla mia macchina, i server delle rotaie appariranno come processi ruby. killall -9 railsè molto più specifico e non funziona con le versioni precedenti dei server rails (fornisce un 'rails: nessun processo trovato' perché il processo si chiama ruby)

Si è verificato questo problema qualche tempo fa. Dopo aver inviato un modulo in activeadmin, il server di rotaie si è appena bloccato e non sono stato in grado di ucciderlo con mezzi normali (anche dopo ctrl + z era ancora in esecuzione in background). La risposta dello studente ha aiutato, ma questo comando non ha bisogno dell'ID di processo.


0

È tardi per questa domanda. Ecco i miei 2 centesimi. Ho eseguito un'attività di rake per arrestare il server quando non ho accesso ad esso. Ho provato solo su Mac però.

Con questo puoi semplicemente aggiungerlo al tuo progetto, quindi eseguire il comando rake.

Ecco qui:

Gist link: la versione più recente sarà qui. https://gist.github.com/houmanka/289184ca5d8d92de0499#file-server-rake

Alcuni codici qui:

# 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

Inoltre, assicurarsi di eseguire il comando Cntrl + C nello stesso terminale (scheda) utilizzato per avviare il server.

Nel mio caso, avevo 2 schede ma ho dimenticato di interrompere la corretta scheda del server e mi chiedevo perché Cntrl + C non funziona.


0

Un modo semplicissimo sarebbe

gem install shutup

quindi vai nella cartella corrente del tuo progetto rails ed esegui

shutup # questo interromperà il processo Rails attualmente in esecuzione

Puoi usare il comando 'shutup' ogni volta che vuoi

DICLAIMER: Sono il creatore di questa gemma

NOTA: se si utilizza rvm, installare la gemma a livello globale

rvm @global do gem install shutup


0

Possiamo terminare la sessione di rails su Linux usando il PORT n

fuser -k 3000/tcp 

qui 3000 è un porto n. Ora riavvia il tuo server, vedrai che il tuo server è in esecuzione.


0

Segui questi passi:

  1. apri il tuo progetto
  2. seleziona nella cartella tmp
  3. seleziona la cartella pids
  4. elimina il file server.pid
  5. ora avvia il tuo server rails

Non ha funzionato sulla mia applicazione rails 5.2. Address already in use - bind(2) for "127.0.0.1" port 3000 (Errno::EADDRINUSE)
a.barbieri il

0
  1. Basta aprire il file utilizzando la posizione indicata sudo vi /Users/user1/go/src/github.com/rails_app/rails_project/tmp/pids/server.pid

  2. trova il process_id / thread_id in cui è in esecuzione il processo.

  3. Uccidi il processo / thread specificato usando kill -9 84699


0

Sui binari 6 utilizzando

ps aux | grep rails non stava restituendo il processo del server

Ho dovuto fare

ps aux | grep puma

per trovare il processo reale e poi ucciderlo usando

kill -9 {process_id}


0

Se si utilizza una versione più moderna di Rails e utilizza Puma come server Web, è possibile eseguire il comando seguente per trovare il processo Puma bloccato:

ps aux | grep puma

Si otterrà un output simile a questo:

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

Vuoi il processo a cui non ti riferisci grep. In questo caso, l'ID processo è 85923.

Posso quindi eseguire il comando seguente per terminare quel processo:

kill -9 85923

inserisci qui la descrizione dell'immagine

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.