Адрес уже используется-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>'
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