Адреса вже використовується - прив'яжіть (2) (Errno :: EADDRINUSE)


130

Я намагаюся розгорнути додаток 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>'

1
це саме те, що написано. хтось уже використовує порт 3000. використовуйте netstat, щоб з’ясувати, хто знаходиться в порту 3000
Mircea

4
Коли я намагаюся його вбити, я отримую помилку kill -59780 PID. Розповідає мені invalid signal specification. Раніше я lsof -wni tcp:3000показував, що використовує порт 3000.
Корнелій Вілсон,

1
вбити -9 59780 (так що "вбивати -9 pid_id" взагалі)
Mircea

Відповіді:


288

Вам потрібно використовувати kill -9 59780з 59780замінено знайшов номер PID (використання , lsof -wni tcp:3000щоб побачити , який процес використовуваного 3000порту і почати процес PID).

Або ви можете просто змінити ваш пума конфігурації змінити порт TCP tcp://127.0.0.1:3000від 3000до 9292або інший порт , який не був використаний.

Або ви можете запустити свою програму рейкові, скориставшись:

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

дякую за цю відповідь У мене така ж помилка з ОП. і що я зрозумів - це вже роблю rails sна іншому терміналі. Тому я отримав цю помилку. тоді я використовував порт порт для запуску сервера rails s -p 9090
Fai Zal Dong

129

Щоб вбити процес пуми, спочатку запустіть

    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

Потрібно вирішити проблему


Завдяки @ sawo-cliff це вирішило мою проблему. У мене з'явилася ще одна програма, що працює на порту 3000.
Nomis

3
Як ця відповідь додає більше інформації, ніж прийнято рік тому?
Andre Figueiredo

1
@AndreFigueiredo, не зовсім впевнений, що я слідую за вашим запитанням, але, зважаючи на те, що я можу отримати від нього, моя відповідь додала, як знати, який ідентифікатор процесу працює, щоб знати, що вбити.
Sawo Cliff

Так. Тепер я бачу, що оригінальний DID відповіді містить ту саму інформацію. Але я не повністю зрозумів, що мені потрібно зробити, поки не прочитав цю версію.
Джефф Живкович

28

Ви також можете спробувати цей трюк:

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

Використовуйте, kill -9 67661якщо kill 67661насправді процес не вбиває вас (як показано в наведеному вище прикладі). Це працювало для мене! Ура!
Вільям Хемпшир

3

В цьому випуску 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 $2 }' | head -n 1`.strip
puts "PID: #{pid}"
`kill -9 #{pid}` unless pid.empty?

Ви можете запустити його в irb або в рубіновому файлі.

Для останнього створіть, server_killer.rbа потім запустіть йогоruby server_killer.rb


Це спрацювало для мене спасибі, але я вийняв судо, так як мені здалося, що це не потрібно.
Оброміос

1

Ви можете знайти і вбити запущені процеси: ps aux | grep puma тоді ви можете вбити йогоkill PID


0

Якщо вищевказані рішення не працюють на ubuntu / linux, тоді ви можете спробувати це

sudo fuser -k -n tcp port

Запустіть його кілька разів, щоб знищити процеси на своєму виборі. Порт може бути 3000, наприклад. Ви б убили всі процеси, якщо після виконання команди не побачите жодного результату

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.