Não é possível parar o servidor de trilhos

126

Eu sou novo no Rails e estou usando uma máquina ubuntu e o IDE rubymine. O problema é que não consigo parar o servidor de trilhos. Eu tentei parar o servidor matando o processo de trilhos. Mas, quando executo pgrep -l rails, esse processo não é encontrado. Portanto, sou capaz de matar apenas processos ruby, mas o servidor não para.

Eu tentei ./script/server stop(desde que o iniciei executando ./script/server start), mas isso não funcionou. Pesquisando e encontrando algumas postagens de stackoverflow, tentei alterar a porta de escuta da porta localhost, mas sem sucesso. Alguém poderia ajudar?

epsilones
fonte
2
=> Ctrl-C para o servidor desligamento
gabrielhilal
@Newben você quer matar todo o processo?
Apr
@ Sri, sim, eu quero matar todo o processo
epsilones
1
@Newben Verifique minha resposta atualizada abaixo e dar uma tentativa e deixe-me saber
Learner

Respostas:

303

Você pode usar outras portas como as seguintes:

rails server -p 3001

Normalmente, no seu terminal, você pode tentar Ctrl + Cdesligar o servidor.

A outra maneira de matar o servidor padrão do Ruby on Rails (que é WEBrick) é:

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

No seu terminal para descobrir o PID do processo:

$ lsof -wni tcp:3000

Em seguida, use o número na coluna PID para interromper o processo:

Por exemplo:

$ kill -9 PID

E algumas das outras respostas que encontrei são:

Para parar o servidor Rails enquanto estiver em execução, pressione:

CTRL-C
CTRL-Z

Você voltará ao controle bash. Em seguida, digite (sem o $):

$ fg

E isso voltará ao processo e sairá Rails scorretamente.

É um pouco chato, mas isso certamente supera a matança do processo manualmente. Não é tão ruim e é o melhor que pude descobrir.

Resposta atualizada:

Você pode usar killall -9 railspara matar todos os aplicativos em execução com " rails" no nome.

killall -9 rails

Aprendiz
fonte
Desculpe, lsof tcp -wni: 3000 retorna nada, e eu não tenho qualquer tmp / pids / pasta
epsilones
Se o Webrick estiver em execução, seu PID estará no {APP_ROOT}/tmp/pids/server.pidarquivo para que você não precise procurá-lo - enquanto o servidor estiver em execução. Portanto, se ctrl-cvocê executar esse comando kill em outro terminal, em vez de fazê- lo, ele matará o servidor Webrick imediatamente.
Learner
Quando executo killall -9 rails, recebo a mensagem dizendo 'não foi encontrado nenhum processo' ??
epsilones
Aliás, a pasta {APP_ROOT} / tmp / pids / existe de fato, mas está vazia
epsilones
1
Nenhum desses comandos fez nada por mim. No entanto, a reinicialização da máquina corrigiu o problema.
Herb Meehan
51

você pode usar o comando grep da seguinte maneira,

ps aux | grep rails

e depois

kill -9 {process_id} 
maximus ツ
fonte
na verdade, este commnad única capturas '0:00 grep --color = auto trilhos', que eu acho que é o grep chamada de comando ...
epsilones
Graças a esta solução, trabalhando para o servidor que ainda executa até a força do terminal fechada. Agradável
ksugiarto
E se eu tiver muitos processos e não quiser matá-los manualmente, um por um?
Nickolay Kondratenko
Você pode matá-los todos porkillall -9 rails
maximus
encontrar o servidor que eu tinha que fazerps aux | grep puma
Sami Birnbaum
27

pkill -9 rails matar todo o processo de trilhos

Resposta atualizada

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

Isso matará qualquer processo de trilhos em execução. Substitua 'trilhos' por outra coisa para matar quaisquer outros processos.

Vasu Adari
fonte
18

A seguir estão as etapas para eliminar o processo do servidor:

1. lsof -i tcp:3000

2. kill -9 1234

onde 1234está o PID do processo: localhost: 3000 exibido na etapa 1.

OU

Remova o arquivo (server.pid) em Rails.root/tmp/pids/e reinicie o servidor.

OU

abra o aplicativo em outra porta usando o comando:

rails s -p 3001

puneet18
fonte
15

No meu MAC o killall -9 railsnão funciona. Mas killall -9 rubyfaz.

user2055780
fonte
Mesmo. Esse é o COMMANDvalor também.
precisa saber é o seguinte
10

Eu geralmente uso:

killall ruby

OU

pkill -9 ruby

que vai matar todos os processos relacionados rubi que estão em execução como rails server, rails console, etc.

przbadu
fonte
Se você não conhece o pkill -9 ou o kill -9, também vale a pena notar que isso também pode matar outros processos ruby, por exemplo, o IDE da rubimina.
Kjell
4

1. Simplesmente exclua o arquivo pid do diretório do aplicativo rails

Rails_app -> tmp -> pids -> pid file

Exclua o arquivo e execute

rails start


2. Para o Rails 5.0 e superior, você pode usar este comando

rails restart

Aravin
fonte
3

Use ctrl+cpara desligar o servidor Webrick.

Infelizmente, se não funcionar, feche o terminal com força e reinicie-o.

Outro truque é 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
fonte
mesmo u reiniciado as vezes o servidor esta rodando. Porque nós precisamos para matar o temp / pid para parar o servidor
Learner
Porém, normalmente, a finalização do terminal interrompe o processo, pois seu processo em primeiro plano é executado e é executado no terminal.
Gopal S Rathore
3

Exclua o server.pid da pasta tmp / pids. No meu caso, o erro foi: Um servidor já está sendo executado. Verifique /home/sbhatta/myapp/tmp/pids/server.pid.

Então, eu apago server.pid

rm /home/sbhatta/myapp/tmp/pids/server.pid então corra rails s

Santanu
fonte
3

Etapa 1: encontre quais itens estão consumindo 3000 portas.

lsof -i:3000

etapa 2: encontre o processo chamado

Para Mac

ruby      TCP localhost:hbci (LISTEN)

Para o Ubuntu

ruby      TCP *:3000 (LISTEN)

Etapa 3: encontre o PID do processo e mate-o.

kill -9 PID
errakeshpd
fonte
2

Ctrl-Z normalmente deve fazer o truque.

himanish.k
fonte
2

Eu usei killall -9 railscomo Sri sugeriu e não funcionou. Ajustei o comando killall -9 rubye o servidor foi fechado imediatamente.

Tl; dr: killall -9 ruby

Rebecca
fonte
2

é tão simples quanto

pkill -9 ruby

nada mais nada menos

Elta3lab
fonte
1

Quando o servidor rails não inicia, significa que já está em execução, então você pode começar usando uma nova porta, por exemplo.

rails s -p 3001

ou , nesse caso, você deseja excluir a pasta temp na estrutura de diretórios do rails , inicia o servidor rails.

Gajanan
fonte
1

verifique o /tmp/tmp/server.pid

há um pid dentro.

Normalmente, eu vou "matar -9 THE_PID" no cmd

Nich
fonte
Eu não tenho esse caminho, onde poderia estar em uma máquina ubuntu?
epsilones
ele está escondido ... ir para a pasta de aplicativos, ctrl + H para mostrar seus arquivos ocultos, então u capaz de vê-lo
Nich
1

Tenho notado no Windows (estou usando 10, mas não tenho certeza se o mesmo para oler). Se você usar cmd.exe e ctrl + c, o servidor raisl será interrompido corretamente.

No entanto, se você usa o Git Bash, isso não acontece. Diz que sim, mas quando você olha para os tmp pids, ele ainda está lá.

Talvez um bug com o git bash?

Brad
fonte
1

killall -9 rubymatará todos os processos ruby ​​e, pelo menos na minha máquina, os servidores Rails aparecerão como processos ruby. killall -9 railsé muito mais específico e não funciona para versões mais antigas de servidores rails (fornece um 'rails: nenhum processo encontrado' porque o processo é chamado de ruby)

Encontrou esse problema há um tempo atrás. Depois de enviar um formulário no activeadmin, o servidor rails travou e eu não consegui eliminá-lo usando meios normais (mesmo depois de ctrl + z ainda estar em execução em segundo plano). A resposta do aluno ajudou, mas esse comando não precisa da identificação do processo.

Somil Mishra
fonte
0

É tarde para esta pergunta. Aqui estão os meus 2 centavos. Fiz uma tarefa de rake para interromper o servidor quando não tenho acesso a ele. Só testei no Mac.

Com isso, você pode simplesmente adicioná-lo ao seu projeto e executar o comando rake.

Aqui está:

Link principal: a versão mais recente estará aqui. https://gist.github.com/houmanka/289184ca5d8d92de0499#file-server-rake

Algum código aqui:

# 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`
Mr H
fonte
0

Além disso, verifique se você está executando o comando Cntrl + C no mesmo terminal (guia) usado para iniciar o servidor.

No meu caso, eu tinha duas guias, mas esqueci de parar o servidor da guia correta e fiquei pensando por que o Cntrl + C não está funcionando.

Cinza
fonte
0

Uma maneira super fácil seria

gem install shutup

então vá na pasta atual do seu projeto rails e execute

shutup # isso matará o processo Rails atualmente em execução

Você pode usar o comando 'shutup' toda vez que quiser

DICLAIMER: Eu sou o criador desta gema

NOTA: se você estiver usando o rvm, instale a gema globalmente

rvm @global do gem install shutup
Lorenzo Sinisi
fonte
0

Para a minha máquina Windows 10, o Ctrl - C+ Ctrl - Dfunciona.

Ebran Khan
fonte
0

Podemos matar a sessão de trilhos no Linux usando PORT no

fuser -k 3000/tcp 

aqui 3000 é uma porta não. Agora reinicie o servidor, você verá que o servidor está em estado de execução.

Akash Jain
fonte
0

Siga esses passos:

  1. abra seu projeto
  2. selecione na pasta tmp
  3. selecionar pasta pids
  4. excluir arquivo server.pid
  5. agora inicie o servidor rails
Krishna Singh Shahi
fonte
Não funcionou no meu aplicativo rails 5.2. Address already in use - bind(2) for "127.0.0.1" port 3000 (Errno::EADDRINUSE)
a.barbieri 10/01
0
  1. Basta abrir o arquivo usando o local indicado sudo vi /Users/user1/go/src/github.com/rails_app/rails_project/tmp/pids/server.pid

  2. encontre o process_id / thread_id no qual o processo está sendo executado.

  3. Mate o processo / thread especificado usando kill -9 84699

Soumya Sengupta
fonte
0

Nos trilhos 6, usando

ps aux | grep rails não estava retornando o processo do servidor

eu tive que fazer

ps aux | grep puma

para encontrar o processo real e depois matá-lo usando

kill -9 {process_id}

Sami Birnbaum
fonte
0

Se você estiver usando uma versão mais moderna do Rails e usar o Puma como servidor da Web, poderá executar o seguinte comando para encontrar o processo Puma preso:

ps aux | grep puma

Isso resultará em uma saída semelhante a esta:

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

Você deseja o processo que não está se referindo grep. Nesse caso, o ID do processo é 85923.

Posso então executar o seguinte comando para eliminar esse processo:

kill -9 85923

insira a descrição da imagem aqui

Tina
fonte