2011-01-09 4 views
7

이봐, 내가 도와 줄 수 있으면 좋겠다.rails3에서 404/500과 같은 오류를 처리하는 방법

사용자를 내 공용 폴더의 기본 오류 페이지 404.html 및 500.html로 안내하는 방법을 찾으려고합니다.

그래서 라우팅 또는 이름 지정 오류가 발생하면 해당 경로로 이동해야합니다. 이미 내 응용 프로그램 컨트롤러에서 몇 가지 시도했지만 작동하지 않았다.

많은 감사합니다.

+0

404.htm과 500.htm을 공용 폴더에 넣는 것이 좋습니다. 그러나 나는 확실하지 않다. – PeterWong

+0

나는 기본적으로 거기에 넣었습니다. 그러나 그들은 오류가 발생하면 나타나지 않는다. – daniel

답변

19

레일스는 프로덕션 모드에서 자동 실행됩니다. 응용 프로그램을 라이브 서버에 업로드하면 Rails는 해당 예외를 처리하고 올바른 헤더 상태로 올바른 오류 페이지를 렌더링합니다. 이러한 페이지의 모습 (테스트 용 또는 무언가)을보고 싶다면 http://localhost:3000/404.html

실제 서버에 레일즈 애플리케이션을 설정할 때마다 (예를 들어 Apache를 사용하자), 응용 프로그램에서 /public 폴더로 사이트 루트를 지정하십시오. 그런 다음 해당 서버 주소에 대한 요청이있을 때마다 Apache는 먼저 해당 공용 폴더를보고 고정 자산을 제공하려고 시도합니다 (이것은 [environment].rb에 구성 가능한 옵션입니다). 요청 된 페이지를 찾을 수 없으면 요청은 Ruby 스택을 통해 전달됩니다.

생산 모드에서 Rails가 처리되지 않는 (즉, 시작, 복구) 오류가 발생하면 스택에 오류가 발생하여 Apache에 (내 예제에서) 다시 알립니다. 적절한 오류를 렌더링합니다. 수동으로 그렇게 할 필요가 없습니다 - 생산 모드에서 실행하는 경우

ActiveRecord::RecordNotFound => 404 (page not found) 
nil.method => 500 (server error) unless you turn off whiny nils 
ActionController::RoutingError => 404 (page not found) 
+0

대단히 감사합니다! – daniel

+0

@DannyRe - 도움이 될만한 답변을 추가했습니다. – sethvargo

2

가 자동으로 발생합니다

다음은 개발 모드와 그들이 생산 모드에서 렌더링에 볼 수있는 몇 가지 일반적인 오류입니다.

2

this post을보고 라우팅 오류를 일으키는 모든 요청을 리디렉션하십시오.

관련 문제