:rescue_from의 ActionController :: RoutingError 레일에서 나는 다음과 같은 오류가있어 4
ActionController::RoutingError (No route matches [GET] "/images/favicon.ico")
나는 존재하지 않는 링크 error404 페이지를 표시 할.
어떻게하면됩니까? application_conroller.rb
에서
:rescue_from의 ActionController :: RoutingError 레일에서 나는 다음과 같은 오류가있어 4
ActionController::RoutingError (No route matches [GET] "/images/favicon.ico")
나는 존재하지 않는 링크 error404 페이지를 표시 할.
어떻게하면됩니까? application_conroller.rb
에서
는 다음을 추가 :
# You want to get exceptions in development, but not in production.
unless Rails.application.config.consider_all_requests_local
rescue_from ActionController::RoutingError, with: -> { render_404 }
end
def render_404
respond_to do |format|
format.html { render template: 'errors/not_found', status: 404 }
format.all { render nothing: true, status: 404 }
end
end
내가 일반적으로 또한 예외를 다음과 같은 구조를하지만, 그건 당신에게 달렸어요 : 그럼
class ErrorsController < ApplicationController
def error_404
render 'errors/not_found'
end
end
:
rescue_from ActionController::UnknownController, with: -> { render_404 }
rescue_from ActiveRecord::RecordNotFound, with: -> { render_404 }
는 오류 컨트롤러 만들기 in routes.rb
unless Rails.application.config.consider_all_requests_local
# having created corresponding controller and action
get '*path', to: 'errors#error_404', via: :all
end
그리고 마지막이 만드는 것입니다 not_found.html.haml
(또는 당신이 사용하는 어떤 템플릿 엔진) /views/errors/
아래 :
%span 404
%br
Page Not Found
나는이 오류가 발생했다. 내가 favicon 이미지을 app/assets/images
에 복사했으며 나를 찾았습니다.
@ Andrey Deineko, 해결책은 conrtoller 내에서 수동으로 제기 된 RoutingError
에 대해서만 작동하는 것 같습니다. URL을 my_app/not_existing_path
으로 시도해도 여전히 표준 오류 메시지가 표시됩니다.
레일스가 이전에 오류를 발생시키기 때문에 응용 프로그램이 컨트롤러에 도달하지 않았기 때문입니다.
날 경로의 끝에 다음 줄을 추가하는 것이었다에 대한 문제를 해결 trick
:Rails.application.routes.draw do
# existing paths
match '*path' => 'errors#error_404', via: :all
end
모든 미리 정의하지 요청을 잡으려고.
그런 다음 ErrorsController에 당신은 HTML, JSON ... 요청을 처리하기 위해 respond_to
를 사용할 수 있습니다
class ErrorsController < ApplicationController
def error_404
@requested_path = request.path
repond_to do |format|
format.html
format.json { render json: {routing_error: @requested_path} }
end
end
end
'@requested_path = request.path'와 그에 상응하는'format.json {render json : {routing_error : @requested_path}}'를 설명 할 수 있습니까? –
방금 템플릿에서'@ requested_path'를 사용했습니다 (error_404.html.haml). json에 관해서는, 만약 내가 아약스에 의해 예를 들어, 전체 페이지를 반환 싶지 않아요, 나는 반환 된 json을 요청할 수 있으며, 오류 메시지가 나타납니다 – Misu
이 레일 4.2.5에서 작동하지 않습니다. 컨트롤러 코드가 실행되기 전에 예외가 ActionDispatch에 의해 발생했기 때문에 그럴 것 같습니다. – depquid
@depquid Rails 4.0.x의 시대에 썼지 만 Rails 4.2.5로 테스트했습니다 - 경로를 추가하지 않았고'errors_controller.rb'를 만들지 않았다고 가정합니다 :) 만약 그렇다면 - 더 이상 떠나야하는 이유가없는 한 downvote를 철회하십시오. –
죄송합니다. 올바르게 경로를 설정하지 않았습니다. 하지만 액션에 직접 라우팅하는 경우'rescue_from ActionController :: RoutingError, with : -> {render_404} '이유는 무엇입니까? – depquid