No se puede detener el servidor de rails

126

Soy nuevo en rails y estoy usando una máquina ubuntu y el IDE de rubymine. El problema es que no puedo detener el servidor de rails. Traté de detener el servidor matando el proceso de rieles. Pero, cuando ejecuto pgrep -l rails, no se encuentra dicho proceso. Por lo tanto, solo puedo eliminar los procesos de ruby, pero el servidor no se detendrá.

Lo intenté ./script/server stop(desde que lo comencé corriendo ./script/server start), pero eso no funcionó. Buscando en Google y buscando algunas publicaciones de stackoverflow, intenté cambiar el puerto de escucha del puerto localhost pero sin éxito. ¿Alguien podría ayudar?

épsilones
fuente
2
=> Ctrl-C para apagar el servidor
gabrielhilal
@Newben, ¿quieres matar todo el proceso?
Estudiante
@Sri, sí, quiero matar todo el proceso
epsilones
1
@Newben Comprueba mi respuesta actualizada a continuación y pruébalo y avísame
Estudiante

Respuestas:

303

Puede usar otros puertos como el siguiente:

rails server -p 3001

Normalmente en su terminal puede intentar Ctrl + Capagar el servidor.

La otra forma de matar el servidor predeterminado de Ruby on Rails (que es WEBrick) es:

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

En su terminal para averiguar el PID del proceso:

$ lsof -wni tcp:3000

Luego, use el número en la columna PID para matar el proceso:

Por ejemplo:

$ kill -9 PID

Y algunas de las otras respuestas que encontré son:

Para detener el servidor de rails mientras se está ejecutando, presione:

CTRL-C
CTRL-Z

Volverás a tener el control bash. Luego escriba (sin el $):

$ fg

Y esto volverá al proceso y luego se cerrará Rails scorrectamente.

Es un poco molesto, pero esto supera a matar el proceso manualmente. No es tan malo y es lo mejor que pude entender.

Respuesta actualizada:

Puede usar killall -9 railspara eliminar todas las aplicaciones en ejecución con " rails" en el nombre.

killall -9 rails

Aprendiz
fuente
Lo siento, lsof -wni tcp: 3000 no devuelve nada, y no tengo ninguna carpeta tmp / pids /
epsilones
Si Webrick se está ejecutando, su PID está en el {APP_ROOT}/tmp/pids/server.pidarchivo para que no tenga que buscarlo, siempre y cuando el servidor se esté ejecutando. Entonces, si en lugar de hacerlo ctrl-c, simplemente ejecuta ese comando kill en otra terminal, matará al servidor Webrick de inmediato.
Estudiante
Cuando ejecuto killall -9 rails, recibo el mensaje que dice 'no se encontró tal proceso'?
epsilones
Por cierto, la carpeta {APP_ROOT} / tmp / pids / existe de hecho pero está vacía
epsilones
1
Ninguno de estos comandos hizo nada por mí. Sin embargo, reiniciar la máquina solucionó el problema.
Herb Meehan
51

puedes usar el comando grep de la siguiente manera,

ps aux | grep rails

y entonces

kill -9 {process_id} 
maximus ツ
fuente
de hecho, este comando solo captura '0:00 grep --color = auto rails', que supongo es el comando llamado grep ...
epsilones
Gracias, esta solución funciona para servidores que aún ejecutan incluso la terminal cerrada. Niza
ksugiarto
¿Y si tengo muchos procesos y no quiero matarlos manualmente uno por uno?
Nickolay Kondratenko
Puedes matarlos a todos porkillall -9 rails
maximus ツ
encontrar el servidor que tuve que hacerps aux | grep puma
Sami Birnbaum
27

pkill -9 rails para matar todo el proceso de rieles

Respuesta actualizada

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

Esto matará cualquier proceso de rieles en ejecución. Reemplace 'rieles' con algo más para eliminar cualquier otro proceso.

Vasu Adari
fuente
18

Los siguientes son pasos para eliminar el proceso del servidor:

1. lsof -i tcp:3000

2. kill -9 1234

donde 1234está el PID del proceso: localhost: 3000 display en el paso 1.

O

Elimine el archivo (server.pid) debajo Rails.root/tmp/pids/y reinicie el servidor.

O

Abra la aplicación en otro puerto mediante el comando:

rails s -p 3001

puneet18
fuente
15

En mi MAC killall -9 railsno funciona. Pero lo killall -9 rubyhace.

usuario2055780
fuente
Mismo. Ese es el COMMANDvalor también.
IIllIIll
10

Generalmente uso:

killall ruby

O

pkill -9 ruby

que matará a todos los procesos relacionados con el rubí que se ejecutan como rails server, rails console, etc.

przbadu
fuente
Si no conoce pkill -9 o kill -9, también podría valer la pena notar que esto también podría matar otros procesos de ruby, por ejemplo, el IDE de rubymine.
Kjell
4

1. Simplemente elimine el archivo pid del directorio de la aplicación rails

Rails_app -> tmp -> pids -> pid file

Eliminar el archivo y ejecutar

rails start


2. Para Rails 5.0 y superior, puede usar este comando

rails restart

Aravin
fuente
3

Úselo ctrl+cpara apagar su servidor Webrick.

Desafortunadamente, si no funciona, cierre con fuerza el terminal y reinícielo.

Otro truco es 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
fuente
incluso reinició a veces el servidor se está ejecutando. Porque tenemos que matar el tempo / pid para detener el servidor
Estudiante
Pero normalmente, la terminación del terminal detiene el proceso debido a su proceso de primer plano y se ejecuta en el terminal.
Gopal S Rathore
3

Elimine el server.pid de la carpeta tmp / pids. En mi caso, el error fue: ya se está ejecutando un servidor. Verifique /home/sbhatta/myapp/tmp/pids/server.pid.

Entonces, elimino server.pid

rm /home/sbhatta/myapp/tmp/pids/server.pid entonces corre rails s

Santanu
fuente
3

Paso 1: encuentre cuáles son los artículos que consumen 3000 puertos.

lsof -i:3000

paso 2 : encuentra el proceso llamado

Para Mac

ruby      TCP localhost:hbci (LISTEN)

Para Ubuntu

ruby      TCP *:3000 (LISTEN)

Paso 3: Encuentra el PID del proceso y mátalo.

kill -9 PID
errakeshpd
fuente
2

Ctrl-Z normalmente debería hacer el truco.

himanish.k
fuente
2

Solía killall -9 railscomo Sri sugirió y no funcionó. Ajusté el comando killall -9 rubyy el servidor se cerró de inmediato.

Tl; dr: killall -9 ruby

Rebecca
fuente
2

es tan simple como

pkill -9 ruby

nada más y nada menos

Elta3lab
fuente
1

Cuando el servidor rails no se inicia, significa que ya se está ejecutando, entonces puede comenzar utilizando un nuevo puerto, por ejemplo.

rails s -p 3001

o se inicia y se detiene en ese caso si desea eliminar la carpeta temporal en la estructura de directorios de rails , inicia el servidor de rails.

Gajanan
fuente
1

compruebe el /tmp/tmp/server.pid

Hay un pid adentro.

Por lo general, haré "kill -9 THE_PID" en el cmd

Nich
fuente
No tengo esta ruta, ¿dónde podría estar en una máquina ubuntu?
epsilones
está oculto ... vaya a la carpeta de su aplicación, ctrl + H para mostrar sus archivos ocultos, luego podrá verlo
Nich
1

He notado en Windows (estoy usando 10 pero no estoy seguro de si es lo mismo para Oler). Si usa cmd.exe y ctrl + c, el servidor raisl se detiene correctamente.

Sin embargo, si usa Git Bash, no lo hace. Dice que sí, pero cuando miras los tmp pids, todavía está allí.

Tal vez un error con git bash?

Puntilla
fuente
1

killall -9 ruby matará todos los procesos de ruby, y al menos en mi máquina, los servidores rails aparecen como procesos de ruby. killall -9 railses mucho más específico y no funciona para versiones anteriores de servidores rails (da un 'rails: no se encontró ningún proceso' porque el proceso se llama ruby)

Encontré este problema hace un tiempo. Después de enviar un formulario en activeadmin, el servidor de rails simplemente se colgó y no pude matarlo usando los medios normales (incluso después de ctrl + z todavía se estaba ejecutando en segundo plano). La respuesta del alumno ayudó, pero este comando no necesita identificación de proceso.

Somil Mishra
fuente
0

Es tarde para esta pregunta. Aquí están mis 2 centavos. Hice una tarea de rastrillo para detener el servidor cuando no tengo acceso a él. Sin embargo, solo probé en Mac.

Con esto, simplemente puede agregarlo a su proyecto y luego ejecutar el comando rake.

Aqui tienes:

Enlace esencial: la última versión estará aquí. https://gist.github.com/houmanka/289184ca5d8d92de0499#file-server-rake

Algún código aquí:

# 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`
Señor h
fuente
0

Además, asegúrese de ejecutar el comando Cntrl + C en la misma terminal (pestaña) que se utiliza para iniciar el servidor.

En mi caso, tenía 2 pestañas, pero olvidé detener el servidor de la pestaña correcta y me preguntaba por qué Cntrl + C no funciona.

Ceniza
fuente
0

Una forma súper fácil sería

gem install shutup

luego vaya a la carpeta actual de su proyecto rails y ejecute

shutup # esto matará el proceso de Rails que se está ejecutando actualmente

Puedes usar el comando 'shutup' cada vez que quieras

DICLAIMER: Soy el creador de esta gema.

NOTA: si está utilizando rvm, instale la gema globalmente

rvm @global do gem install shutup
Lorenzo Sinisi
fuente
0

Para mi máquina con Windows 10, Ctrl - C+ Ctrl - Dfunciona.

Ebran Khan
fuente
0

Podemos matar la sesión de rails en Linux usando PORT no

fuser -k 3000/tcp 

aquí 3000 es un puerto no. Ahora reinicie su servidor, verá que su servidor está en estado de ejecución.

Akash Jain
fuente
0

Sigue estos pasos:

  1. abre tu proyecto
  2. seleccionar en la carpeta tmp
  3. seleccione carpeta pids
  4. eliminar el archivo server.pid
  5. ahora inicie su servidor rails
Krishna Singh Shahi
fuente
No funcionó en mi aplicación de rails 5.2. Address already in use - bind(2) for "127.0.0.1" port 3000 (Errno::EADDRINUSE)
a.barbieri
0
  1. Simplemente abra el archivo usando la ubicación dada sudo vi /Users/user1/go/src/github.com/rails_app/rails_project/tmp/pids/server.pid

  2. encuentre el process_id / thread_id en el que se ejecuta el proceso.

  3. Mata el proceso / hilo especificado usando kill -9 84699

Soumya Sengupta
fuente
0

En rieles 6 usando

ps aux | grep rails no estaba devolviendo el proceso del servidor

Tenía que hacer

ps aux | grep puma

para encontrar el proceso real y luego matarlo usando

kill -9 {process_id}

Sami Birnbaum
fuente
0

Si está utilizando una versión más moderna de Rails y utiliza Puma como servidor web, puede ejecutar el siguiente comando para encontrar el proceso de Puma atascado:

ps aux | grep puma

Resultará en una salida similar 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

Desea el proceso al que no se refiere grep. En este caso, el ID del proceso es 85923.

Entonces puedo ejecutar el siguiente comando para matar ese proceso:

kill -9 85923

ingrese la descripción de la imagen aquí

Tina
fuente