이미 사용중인 주소-bind (2) (Errno :: EADDRINUSE)
Puma 웹 서버와 함께 Rails 앱을 배포하려고합니다. 구성 파일로 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>'
사용이 필요합니다 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
퓨마 프로세스를 먼저 종료하려면
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 $2 }' | head -n 1`.strip
puts "PID: #{pid}"
`kill -9 #{pid}` unless pid.empty?
irb 또는 루비 파일 내에서 실행할 수 있습니다.
후자의 경우 server_killer.rb
다음을 사용 하여 실행하십시오.ruby server_killer.rb
위의 솔루션이 우분투 / 리눅스에서 작동하지 않으면 이것을 시도 할 수 있습니다
sudo fuser -k -n tcp port
선택한 포트에서 프로세스를 종료하려면 여러 번 실행하십시오. 예를 들어 포트는 3000이 될 수 있습니다. 명령을 실행 한 후 출력이 표시되지 않으면 모든 프로세스를 종료했을 것입니다
참고 URL : https://stackoverflow.com/questions/31039998/address-already-in-use-bind2-errnoeaddrinuse
'Programming' 카테고리의 다른 글
Arel and Rails에서 LIKE 쿼리를 수행하는 방법은 무엇입니까? (0) | 2020.07.29 |
---|---|
GUID가 항상 고유하다고 가정해도 안전합니까? (0) | 2020.07.29 |
PHP "if"문에 HTML을 포함시킬 수 있습니까? (0) | 2020.07.29 |
씬 웹 서버 :`start_tcp_server ': 자식 브랜치 체크 아웃 후 수락 자 (RuntimeError) (0) | 2020.07.29 |
`textField : shouldChangeCharactersInRange :`를 사용하여 현재 입력 된 문자를 포함한 텍스트를 어떻게 얻습니까? (0) | 2020.07.29 |