개발 환경
- OS: macOS Big Sur 11.5.2
- IDE: RubyMine 2023.1.2
- Ruby: ruby 2.6.9p207 (2021-11-24 revision 67954) [x86_64-darwin20]
- Ruby on Rails: Rails 5.2.6.2
상황 설명
서버 시작 시 포트 충돌 오류가 발생하였다. 개발하다보면 흔한 일이지만 레일즈 환경에서는 처음이라 기록해둔다.
해결 과정
=> Booting Puma
=> Rails 5.2.6.2 application starting in development
=> Run `rails server -h` for more startup options
[6340] Puma starting in cluster mode...
[6340] * Version 3.12.0 (ruby 2.6.9-p207), codename: Llamas in Pajamas
[6340] * Min threads: 5, max threads: 5
[6340] * Environment: development
[6340] * Process workers: 2
[6340] * Phased restart available
[6340] * Listening on tcp://0.0.0.0:3000
Exiting
/Users/username/.rbenv/versions/2.6.9/lib/ruby/gems/2.6.0/gems/puma-3.12.0/lib/puma/binder.rb:272:in `initialize': Address already in use - bind(2) for "0.0.0.0" port 3000 (Errno::EADDRINUSE)
종료 코드 1(으)로 완료된 프로세스
검색해보니 두가지 방법으로 프로세스 아이디를 확인할 수 있고 해당 프로세스를 죽이고 재시작하면 된다.
# 첫번째 lsof 명령어 사용
# 충돌이 발생한 포트로 검색 (ex. 3000)
$ lsof -wni tcp:3000
# 첫번째 ps 명령어 사용
# 서버명으로 검색 (레일즈의 기본서버 puma)
$ ps aux | grep puma
# 위 명령어로 찾은 PID로 프로세스 죽이기
$ kill -9 [PID]
참고 자료 및 사이트