ruby-on-rails - rails - puma rb
Dirección ya en uso-bind(2)(Errno:: EADDRINUSE) (4)
Encontré el script a continuación en este número de github . Funciona muy bien para mi.
#!/usr/bin/env ruby
port = ARGV.first || 3000
system("sudo echo kill-server-on #{port}")
pid = `sudo lsof -iTCP -sTCP:LISTEN -n -P | grep #{port} | awk ''{ print $2 }'' | head -n 1`.strip
puts "PID: #{pid}"
`kill -9 #{pid}` unless pid.empty?
Puede ejecutarlo en irb o dentro de un archivo ruby.
Para este último, cree
server_killer.rb
luego ejecútelo con
ruby server_killer.rb
Estoy tratando de implementar la aplicación Rails con el servidor web Puma.
Cuando intento iniciar el servidor Puma con un
bundle exec puma -C config/puma.rb
archivos de configuración
bundle exec puma -C config/puma.rb
,
bundle exec puma -C config/puma.rb
un error que
bundle exec puma -C config/puma.rb
que la dirección ya está en uso.
¿Alguien sabe cómo solucionar esto?
bundle exec puma -C config/puma.rb
[23699] Puma starting in cluster mode...
[23699] * Version 2.11.3 (ruby 2.0.0-p353), codename: Intrepid Squirrel
[23699] * Min threads: 5, max threads: 5
[23699] * Environment: development
[23699] * Process workers: 2
[23699] * Preloading application
Jdbc-MySQL is only for use with JRuby
[23699] * Listening on tcp://0.0.0.0:3000
/.rvm/gems/ruby-2.0.0-p353/gems/puma-2.11.3/lib/puma/binder.rb:210:in `initialize'': Address already in use - bind(2) (Errno::EADDRINUSE)
from /.rvm/gems/ruby-2.0.0-p353/gems/puma-2.11.3/lib/puma/binder.rb:210:in `new''
from /Users/lexi87/.rvm/gems/ruby-2.0.0-p353/gems/puma-2.11.3/lib/puma/binder.rb:210:in `add_tcp_listener''
from /.rvm/gems/ruby-2.0.0-p353/gems/puma-2.11.3/lib/puma/binder.rb:96:in `block in parse''
from /.rvm/gems/ruby-2.0.0-p353/gems/puma-2.11.3/lib/puma/binder.rb:82:in `each''
from /.rvm/gems/ruby-2.0.0-p353/gems/puma-2.11.3/lib/puma/binder.rb:82:in `parse''
from /.rvm/gems/ruby-2.0.0-p353/gems/puma-2.11.3/lib/puma/runner.rb:119:in `load_and_bind''
from /.rvm/gems/ruby-2.0.0-p353/gems/puma-2.11.3/lib/puma/cluster.rb:302:in `run''
from /.rvm/gems/ruby-2.0.0-p353/gems/puma-2.11.3/lib/puma/cli.rb:216:in `run''
from /rvm/gems/ruby-2.0.0-p353/gems/puma-2.11.3/bin/puma:10:in `<top (required)>''
from /.rvm/gems/ruby-2.0.0-p353/bin/puma:23:in `load''
from /.rvm/gems/ruby-2.0.0-p353/bin/puma:23:in `<main>''
from /.rvm/gems/ruby-2.0.0-p353/bin/ruby_executable_hooks:15:in `eval''
from /.rvm/gems/ruby-2.0.0-p353/bin/ruby_executable_hooks:15:in `<main>''
Para matar el proceso de puma primero ejecuta
lsof -wni tcp:3000
para mostrar qué está usando el puerto 3000. Luego, use el PID que viene con el resultado para ejecutar el proceso de eliminación.
Por ejemplo, después de ejecutar lsof -wni tcp: 3000, puede obtener algo como
COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAME
ruby 3366 dummy 8u IPv4 16901 0t0 TCP 127.0.0.1:3000 (LISTEN)
Ahora ejecute lo siguiente para eliminar el proceso. (donde 3366 es el PID)
kill -9 3366
Debería resolver el problema
También puedes probar este truco:
ps aux | grep puma
salida de muestra:
myname 77921 0.0 0.0 2433828 1972 s000 R+ 11:17AM 0:00.00 grep puma
myname 67661 0.0 2.3 2680504 191204 s002 S+ 11:00AM 0:18.38 puma 3.11.2 (tcp://localhost:3000) [my_proj]
entonces:
kill 67661
necesita usar
kill -9 59780
(use
lsof -wni tcp:3000
para ver qué proceso usó el puerto
3000
y obtener el proceso pid)
o simplemente modifica su configuración de puma, cambie el puerto
tcp://127.0.0.1:3000
de
3000
a
9292
u otro puerto que no se haya utilizado.
o puede iniciar su aplicación de rieles usando
bundle exec puma -C config/puma.rb -b tcp://127.0.0.1:3001