예외를 발생시키지 않고 Ruby에서 현재 스택 추적 가져오기
현재 역추적(스택 추적)을 예외 없이 Rails 3 앱에 기록하고 싶습니다.어떻게 생각해요?
내가 이걸 왜 원하죠?재정의할 프로세스의 일부를 선택할 수 있도록 Rails에서 템플릿을 찾을 때 발생하는 호출을 추적하려고 합니다(특정 하위 분류 컨트롤러에 대한 보기 경로를 변경하려고 하기 때문입니다).
파일에서 호출하고 싶습니다.gems\actionpack-3.2.3\lib\action_dispatch\middleware\templates\rescues\missing_template.erb
베스트 프랙티스는 아니지만 템플릿 검색이 발생하는 스택의 다운스트림이라는 것은 알고 있습니다.
다음을 사용할 수 있습니다.
# /tmp/caller.rb
def foo
puts caller # Kernel#caller returns an array of strings
end
def bar
foo
end
def baz
bar
end
baz
출력:
caller.rb:8:in `bar'
caller.rb:12:in `baz'
caller.rb:15:in `<main>'
사용해 보십시오.
Thread.current.backtrace
예외가 발생할 때 사용자 지정 오류 페이지를 표시하는 데 사용합니다.
rescue_from Exception do |exception|
logger.error exception.class
logger.error exception.message
logger.error exception.backtrace.join "\n"
@exception = exception
# ExceptionNotifier::Notifier.exception_notification env, @exception
respond_to do |format|
if [AbstractController::ActionNotFound, ActiveRecord::RecordNotFound, ActionController::RoutingError, ActionController::UnknownAction].include?(exception.class)
format.html { render :template => "errors/404", :status => 404 }
format.js { render :nothing => true, :status => 404 }
format.xml { render :nothing => true, :status => 404 }
elsif exception.class == CanCan::AccessDenied
format.html {
render :template => "errors/401", :status => 401 #, :layout => 'application'
}
# format.js { render :json => { :errors => [exception.message] }, :status => 401 }
# format.js { render :js => 'alert("Hello 401")' }
format.js { render :template => 'errors/401.js.erb' }
else
ExceptionNotifier::Notifier.exception_notification(env, exception).deliver
format.html { render :template => "errors/500", :status => 500 } #, :layout => 'im2/application' }
# format.js { render :nothing => true, :status => 500 }
format.js { render :template => 'errors/500.js.erb' }
end
end
end
언급URL : https://stackoverflow.com/questions/11122233/get-current-stack-trace-in-ruby-without-raising-an-exception
'programing' 카테고리의 다른 글
테이블 셀에서 CSS 텍스트 오버플로? (0) | 2023.06.01 |
---|---|
Windows 배치 파일에서 시스템 환경 변수를 설정하시겠습니까? (0) | 2023.06.01 |
Git, 오리진/마스터를 커밋으로 재설정하는 방법은 무엇입니까? (0) | 2023.06.01 |
원격 사이트에서 사용할 수 있는 모든 버전의 보석을 나열하려면 어떻게 해야 합니까? (0) | 2023.06.01 |
psql: 치명적:사용자 "postgres"에 대한 ID 인증 실패 (0) | 2023.06.01 |