Rails 7의 원격 디버깅

2738 단어 rubyrailswebdev
이 게시물은 The Rails and Hotwire Codex에서 추출 및 수정되었습니다.

Rails 7에는 official Ruby debugger . 또한 Foreman을 사용하여 개발 중인 여러 프로세스를 조율합니다. 이렇게 하면 프로세스와 함께 Rails 서버를 실행하여 단일 명령을 사용하여 프런트엔드 자산을 보고 컴파일할 수 있습니다.

귀찮게도 이것은 디버깅을 더 까다롭게 만듭니다. 앱에 중단점을 추가하고 콘솔에서 명령을 실행할 수는 없습니다. 동일한 터미널 창은 여러 프로세스를 실행하므로 항상 상호 작용하지는 않습니다.
debug gem은 이러한 경우에 유용한 원격 디버깅을 지원합니다. 이 설정을 사용하면 외부 독립 디버거 프로세스가 다른 디버기 Ruby 프로세스에 연결됩니다.
application.rb 에 아래 줄을 추가하여 Rails 앱에서 원격 디버깅을 활성화합니다.

require "rails/all"

if defined?(Rails::Server) && Rails.env.development?
  require "debug/open_nonstop"
end

# ...


Rails 환경이 개발 중이고 원격 디버깅을 활성화하기 전에 Rails::Server 상수가 정의되어 있는지 확인합니다. 후자의 검사는 앱이 웹 서버의 컨텍스트에서 실행될 때만 원격 디버깅이 활성화되도록 합니다. Rails 콘솔과 같은 다른 컨텍스트나 Sidekiq과 같은 백그라운드 작업 프로세서에서 활성화하면 안 됩니다.

이제 개발 중인 Rails 서버를 시작하면 debug gem이 디버거 프로세스가 연결할 수 있는 UNIX domain socket을 엽니다.
bin/dev를 사용하여 서버를 시작하고 다른 터미널 창에서 다음을 실행합니다.

$ bundle exec rdbg -a


Rails 서버가 실행 중인 유일한 디버깅 가능한 프로세스인 경우(반드시 있어야 함) 디버거가 연결됩니다. 앱에 중단점을 추가하고 디버거 프로세스에서 명령을 실행할 수 있습니다!
Ctrl+D는 디버거를 종료하고 Rails 서버를 실행 상태로 둡니다. 디버깅을 마친 후에 이 작업을 수행하는 것이 좋습니다. 사용 가능한 명령의 전체 목록은 다음 문서를 확인하십시오: https://github.com/ruby/debug#control-flow .

참고: require "debug/open" 대신 require "debug/open_nonstop" 문을 사용할 수도 있습니다. 여기서 단점은 디버거를 연결하고 디버거를 연결할 때까지continue 시작 시 프로그램이 일시 중지된다는 것입니다. 개발 중에 서버를 얼마나 자주 다시 시작해야 하는지 고려할 때 이것은 매우 까다로울 수 있습니다.

이 게시물이 마음에 든다면 내 책The Rails and Hotwire Codex을 확인하여 Rails 및 Hotwire 기술을 레벨 업하십시오!

좋은 웹페이지 즐겨찾기