已经在使用的地址 – bind(2)(Errno :: EADDRINUSE)

我正在试图部署与Pumanetworking服务器的Rails应用程序。 当试图启动Puma服务器与configuration文件bundle exec puma -C config/puma.rb我得到一个错误,地址已被使用。

有人知道如何解决这个问题吗?

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

你需要使用kill -9 59780 (使用lsof -wni tcp:3000来查看哪个进程使用了3000端口并获得进程pid)

或者你只是修改你的彪马configuration更改TCP端口tcp://127.0.0.1:300030009292或其他未使用的端口。

或者你可以通过使用启动你的rails应用程序

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

杀死美洲狮进程第一次运行

  lsof -wni tcp:3000 

以显示使用端口3000的内容。然后使用结果附带的PID来运行kill过程。

例如,在运行lsof -wni tcp:3000之后,你可能会得到类似的东西

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

现在运行以下来杀死进程。 (其中3366是PID)

 kill -9 3366 

应该解决这个问题

在这个github问题中find下面的脚本。 对我很好。

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

你可以运行它在IRB或ruby文件。

对于后者,创buildserver_killer.rb然后使用ruby server_killer.rb运行它

Interesting Posts