Ya se está ejecutando un servidor. Compruebe… / tmp / pids / server.pid. Salida - rieles

80
..$ rails s
=> Booting WEBrick
=> Rails 4.0.4 application starting in development on http://0.0.0.0:3000
=> Run `rails server -h` for more startup options
=> Ctrl-C to shutdown server
A server is already running. Check /home/..name/rprojects/railsapp/tmp/pids/server.pid.
Exiting

¿Cuál es la forma más fácil de resolver esto para un principiante en rieles?

ben
fuente
Eliminar la tempcarpeta puede solucionar su problema.
shah

Respuestas:

168

Puede eliminar el server.pidarchivo.

rm /your_project_path/tmp/pids/server.pid

Más:

prueba en OSX:

sudo lsof -iTCP -sTCP:LISTEN -P | grep :3000

o en linux:

ps -aef | rieles grep

o

lsof -wni tcp:3000

matar el proceso usando

kill -9 PID (eg,2786)
ben
fuente
1
Nitpicking, pero creo que te refieres a OSX, no a iOS. @SCraig Esto se hace en la línea de comandos.
jmknoll
1
Eliminé el archivo .pid del servidor y aún tenía el problema. Reiniciar mi sistema, aunque no es lo ideal, fue una solución rápida.
Matt
¡Trabajado como un encanto!
William Hampshire
Señor, ¿cómo puedo prevenir esto? Me está pasando muy a menudo, me aburro de eliminar el server.pid manualmente.
Umagon
130

Comando de línea única corto y nítido, que se encargará de ello

kill -9 $(lsof -i tcp:3000 -t)
Karan Purohit
fuente
7
jajaja, es posible que desee cerrar la pestaña de su navegador primero si la tiene abierta en localhost: 3000, de lo contrario, esto puede matar su navegador
TMin
¿Alguien intentó guardar esto como un alias en zsh y no funciona?
stackjlei
A veces, mi servidor se habrá apagado, pero Ruby ha agotado la CPU. Cuando este es el caso, tengo que matar rubyejecutando topobteniendo el PID y luego ejecutándolokill -9 <PID>
daveomcd
17

server.pid solo contiene el ID de proceso del servidor en ejecución.

Si lo haces:

more /your_project_path/tmp/pids/server.pid

obtendrá un número (digamos 6745) que puede usar para detener el servidor anterior con el comando kill:

kill -9 6745

y luego puedes eliminar el archivo con el rmcomando

rm /your_project_path/tmp/pids/server.pid
muichkine
fuente
1
Incluir comillas server.pidinvertidas haría que el shell intentara ejecutar server.pid, ¿no es así?
mwfearnley
14

Si está utilizando docker-compose, y en docker-compose.yml tiene: volumes: - .:/myapp Eso significa que su espacio de trabajo local está asignado a la carpeta / myapp del contenedor.

Todo lo que esté en / myapp no ​​se eliminará para los volúmenes definidos.

Puede eliminar ./tmp/pids/server.piden su máquina local. Entonces / myapp del contenedor no tendrá este archivo.

carril
fuente
4
También puede simplemente eliminar ese archivo automáticamente en cada inicio de contenedores: command: bash -c "rm -f tmp/pids/server.pid && bundle exec rails s -p 3000 -b '0.0.0.0'". Refs: github.com/docker/compose/issues/1393#issuecomment-99988242
leymannx
12

Simple:

vaya a la carpeta raíz del proyecto cuando esto suceda y ejecute:

gem install shutup
shutup

Esto encontrará el proceso que se está ejecutando actualmente, lo eliminará y limpiará el archivo pid

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

rvm @global do gem install shutup
Lorenzo Sinisi
fuente
5

El problema se puede resolver usando:

kill -9 $(more /home/..name/rprojects/railsapp/tmp/pids/server.pid)
webster
fuente
5

A veces sucede porque apaga el servidor a la fuerza, por ejemplo, apaga el sistema operativo / máquina manualmente para que el servidor no tenga tiempo suficiente para iniciar sesión en server.pid.

Una forma sencilla es ir manualmente tmp/pids/(al directorio que se muestra en su consola) y eliminar el server.pidarchivo. Luego, cuando vuelve a iniciar el servidor, rails servero rails screa un nuevo server.pid y puede continuar con el desarrollo.

Caballero Dragón
fuente
3

la forma de interfaz gráfica de usuario para el usuario de Windows

abra ResourceMonitor (taskmanager -> Performance -> ResourceMonitor) y elimine el proceso ruby.exe

ingrese la descripción de la imagen aquí

Alexander Sidikov Pfeif
fuente
3

Abra el path/to/your/rails/project/tmp/pids/server.pidarchivo.

Copia el número que encuentres allí.

correr kill -9 [PID]

¿Dónde [PID]está el número que copió del server.pidarchivo?

Esto matará el proceso del servidor en ejecución y podrá iniciar su servidor nuevamente sin ningún problema.

Daniel Okwufulueze
fuente
3

Mata server.pid usando el comando:

kill -9 `cat /root/myapp/tmp/pids/server.pid`

Nota: Utilice su ruta server.pid que se muestra en la consola / terminal.

Gracias.

Rahul2692
fuente
3

Para obtener información adicional, en el contexto de ejecutar la aplicación en la ventana acoplable.

En el archivo docker-compose.yml, debajo del contenedor de la aplicación, puede usar uno de los siguientes:

command: ["rm /your-app-path/tmp/pids/server.pid && bundle exec bin/rails s -p 3000 -b '0.0.0.0'"]

o

command: ["rm /your-app-path/tmp/pids/server.pid; foreman start"]

Tenga en cuenta el uso de ;o &&, que &&enviará una señal de salida si rmno encuentra el archivo, lo que obligará a su contenedor a detenerse prematuramente. El uso ;continuará ejecutándose.

¿Por qué es esto causado en primer lugar? La razón es que si el servidor (puma / thin / lo que sea) no sale limpiamente, dejará un pid en la máquina host que provocará un error de salida.

Para la portabilidad en lugar de eliminar manualmente el archivo en el sistema host, es mejor verificar si el archivo existe dentro de un archivo con script o de composición.

Jimmy MG Lim
fuente
3

Primero encuentre el número de PID : dónde se atascó el servidor Rails

Ejecute esto para encontrar el PID atascado

cat ./tmp/pids/server.pid

Regresará algo como 65829

Entonces MATA ese PID =>kill 65829

jso1919
fuente
2

Ejecute este comando -

lsof -wni tcp:3000

entonces obtendrás la siguiente tabla -

COMMAND  PID  USER   FD   TYPE DEVICE SIZE/OFF NODE NAME
ruby    2552 shyam   17u  IPv4  44599      0t0  TCP 127.0.0.1:3000 (LISTEN)
ruby    2552 shyam   18u  IPv6  44600      0t0  TCP [::1]:3000 (LISTEN)

Ejecute este comando y reemplace el PID de la tabla anterior

kill -9 PID

ejemplo:

kill -9 2552

Pradnyesh patil
fuente
0

Por este problema,

Lo que hice fue:

  • Elimine la carpeta Pids que se encuentra debajo app/tmp/
  • y luego, cierre la terminal en la que estamos ejecutando la aplicación actual y cierre la pestaña (en la ventana del navegador)

  • después de eso, abra nuevamente la terminal yendo dentro de la carpeta, y luego haga, rails s

  • Luego, abre la pestaña nueva que está ejecutando nuestra aplicación
sowmya
fuente
0

primero copie el cumber dentro del archivo y luego elimínelo: rm /your_project_path/tmp/pids/server.pid y luego créelo nuevamente. touch /YOUR_PROJECT_PATH/tmp/pids/server.pid Funcionó para mí.

Mounaim
fuente
0

Ejecute el siguiente comando en la terminal (solo para linux)

ps aux | grep rails

y entonces

kill -9 [pid]

De otra manera

lsof -wni tcp:3000

y entonces

kill -9 [PID]
Arvind singh
fuente
0

SOLUCIONAR

Dirección ya en uso - bind (2) ”error 500 en Ruby on Rails

Recientemente intenté ejecutar una aplicación Rails en un servidor de producción. No solo no funcionó, sino que también rompió mi servidor de desarrollo localhost: 3000. Localhost solo cargaría una página en blanco o un error 500.

Para resolver esto, utilicé dos comandos rápidos. Si estos no devuelven un resultado, es posible que deba buscar una solución en otro lugar, pero esta es una buena solución rápida.

lsof -wni tcp: 3000

ruby 52179 rachelchervin 50u IPv6 0x ... 7aa3 0t0 TCP [:: 1]: hbci (ESCUCHAR)
ruby 52179 rachelchervin 51u IPv4 0x ... c7bb 0t0 TCP 127.0.0.1:hbci (ESCUCHAR)
ruby 52180 rachelchervin 50u IPv6 0x ... 7aa3 0t0 TCP [:: 1]: hbci (ESCUCHAR)
ruby 52180 rachelchervin 51u IPv4 0x ... c7bb 0t0 TCP 127.0.0.1:hbci (ESCUCHAR)

Este comando muestra todos mis procesos actualmente en ejecución y sus PID (ID de proceso) en el puerto 3000. Debido a que existen procesos en ejecución que no se cerraron correctamente, mi nuevo servidor: 3000 no se puede iniciar, de ahí el error 500.

matar 52179

matar 52180

rieles s

Usé el comando kill de Linux para detener manualmente los procesos ofensivos. Si tiene más de 4, simplemente use kill en cualquier PID hasta que el primer comando vuelva en blanco. Luego, intente reiniciar su servidor localhost: 3000 nuevamente. ¡Esto no dañará su computadora! Simplemente mata los procesos ruby ​​existentes en su puerto localhost. Un nuevo servidor iniciará estos procesos de nuevo. ¡Buena suerte!

Thomas
fuente
0

SOLUCIÓN para Windows:

  1. ver el pid de \ tmp \ pids \ server.pid
  2. abrir cmd como administrador
  3. taskkill / F / PID [pid del paso 1.]
  4. eliminar el archivo server.pid
  5. reiniciar el servidor
tanay burreja
fuente
0

Para ubuntu 20, kill -9 $(ps -aef | grep rails)

riddhi
fuente