已经在使用的地址 – 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:3000
从3000
到9292
或其他未使用的端口。
或者你可以通过使用启动你的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
运行它