Computer >> 컴퓨터 >  >> 프로그래밍 >> Ruby

Pry에서 예외 처리하기: Rails 콘솔을 더 강력하게 만드는 방법

Rails 개발을 하다 보면 콘솔을 정말 자주 사용하게 됩니다. 그리고 이제는 모두가 동의하고 있죠. Pry는 Rails 콘솔 역사상 가장 훌륭한 도구라는 사실을요.

Pry에는 기본적으로 내장된 몇 가지 강력한 기능이 있어서, 예전의 낡은 IRB보다 훨씬 쉽게 예외를 다룰 수 있습니다.

전체 백트레이스 확인하기

Pry(물론 IRB도 마찬가지)에서 예외가 발생하면 축약된 형태의 백트레이스가 화면에 출력됩니다. 대부분의 경우 이 정도면 충분하지만, 항상 그런 것은 아닙니다.

Pry에서는 wtf -v 명령어를 사용해 가장 최근에 발생한 예외의 전체 백트레이스를 확인할 수 있습니다. -v 플래그를 빼고 실행하면 축약된 백트레이스만 표시됩니다.

Pry에서 예외 처리하기: Rails 콘솔을 더 강력하게 만드는 방법 wtf 명령어로 가장 최근의 백트레이스에 접근하기

예외 데이터에 접근하기

예외 객체에는 흥미로운 데이터가 함께 담겨 있는 경우가 많습니다. IRB에서 예외가 발생하면 클래스 이름과 에러 메시지만 볼 수 있지만, Pry에서는 실제 예외 객체에 직접 접근할 수 있습니다. 즉, 필요한 데이터를 원하는 대로 꺼내 쓸 수 있다는 뜻입니다.

가장 최근에 발생한 예외를 가져오려면 _ex_ 변수를 사용하세요. Ruby의 내장 변수인 $!와 달리, rescue 블록 안에 있지 않아도 언제든 자유롭게 사용할 수 있습니다.

Pry에서 예외 처리하기: Rails 콘솔을 더 강력하게 만드는 방법 _ex_ 지역 변수로 가장 최근의 예외에 접근하기

예외 표시 방식 커스터마이징하기

Pry를 사용할 때마다 항상 전체 백트레이스를 보고 싶다고 가정해 봅시다. 기본 예외 핸들러를 재정의하면 그렇게 할 수 있습니다.

~/.pryrc 파일을 열어 아래와 같이 작성하기만 하면 됩니다:

# 이 코드는 Pry의 기본 예외 핸들러를 거의 그대로 가져온 것입니다.
# 원본은 여기서 확인할 수 있습니다: https://github.com/pry/pry/blob/master/lib/pry.rb

Pry.config.exception_handler = proc do |output, exception, _|
  if UserError === exception && SyntaxError === exception
      output.puts "SyntaxError: #{exception.message.sub(/.*syntax error, */m, '')}"
  else
    output.puts "#{exception.class}: #{exception.message}"
    output.puts "from #{exception.backtrace}"   
  end
end

심지어 Pry에서 발생하는 모든 예외를 Honeybadger 같은 에러 추적 서비스에 기록하는 것처럼, 좀 더 과감한 활용도 가능합니다. :)