Адрес уже используется-bind (2) (Errno:: EADDRINUSE)



Я пытаюсь развернуть приложение Rails с веб-сервером Puma. При попытке запустить сервер Puma с конфигурационным файлом 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>'
575   4  

4 ответов:

вам нужно использовать kill -9 59780 (использовать lsof -wni tcp:3000 чтобы увидеть, какой процесс используется 3000 порт и получить процесс pid)

или вы просто измените конфигурацию puma измените tcp-порт tcp://127.0.0.1:3000 С 3000 до 9292 или другой порт, который не используется.

или вы можете запустить приложение rails с помощью

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

чтобы убить процесс puma первый запуск

    lsof -wni tcp:3000 

- чтобы показать, что через порт 3000. Затем используйте PID, который поставляется с результатом, чтобы запустить процесс уничтожения.

например, после запуска 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

должен решить эту проблему

вы также можете попробовать этот трюк:

ps aux | grep puma

пример вывода:

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]

затем:

kill 67661

нашел скрипт ниже в этой выпуск github. Отлично работает для меня.

#!/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  }' | head -n 1`.strip
puts "PID: #{pid}"
`kill -9 #{pid}` unless pid.empty?

вы можете запустить его в irb или внутри файла ruby.

для последнего, создать server_killer.rb затем запустите его с помощью ruby server_killer.rb

Comments

    Ничего не найдено.