Address already in use - bind(2) (Errno::EADDRINUSE)

匿名 (未验证) 提交于 2019-12-03 01:23:02

问题:

I am trying to deploy Rails app with the Puma web server. When trying to start Puma server with a config file bundle exec puma -C config/puma.rb I get an error that the address is already in use.

Does someone know how to fix this?

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 `'     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 `
' 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 `
'

回答1:

you need use kill -9 59780 (use lsof -wni tcp:3000 to see which process used 3000 port and get the process pid)

or you just modify your puma config change the tcp port tcp://127.0.0.1:3000 from 3000 to 9292 or other port that not been used.

or you can start your rails app by using

bundle exec puma -C config/puma.rb -b tcp://127.0.0.1:3001 


回答2:

To kill the puma process first run

    lsof -wni tcp:3000  

to show what is using port 3000. Then use the PID that comes with the result to run the kill process.

For example after running lsof -wni tcp:3000 you might get something like

    COMMAND  PID  USER   FD   TYPE DEVICE SIZE/OFF NODE NAME     ruby    3366 dummy    8u  IPv4  16901      0t0  TCP 127.0.0.1:3000 (LISTEN) 

Now run the following to kill the process. (where 3366 is the PID)

kill -9 3366 

Should resolve the issue



回答3:

Found the script below in this github issue. Works great for me.

#!/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? 

You can either run it in irb or inside a ruby file.

For the latter, create server_killer.rb then run it with ruby server_killer.rb



回答4:

you can also try this trick:

ps aux | grep puma 

sample output:

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] 

then:

kill 67661 


易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!