run rails deploy animal ruby-on-rails puma

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