Merge pull request #11038 from demarches-simplifiees/fix_404_as_500_in_production
Corrige les 404 qui finissaient en erreur 500 en production
This commit is contained in:
commit
19e46ac619
2 changed files with 20 additions and 10 deletions
|
@ -1,7 +1,8 @@
|
|||
# frozen_string_literal: true
|
||||
|
||||
class ErrorsController < ApplicationController
|
||||
rescue_from Exception do
|
||||
rescue_from StandardError do |exception|
|
||||
Sentry.capture_exception(exception)
|
||||
# catch any error, except errors triggered by middlewares outside controller (like warden middleware)
|
||||
render file: Rails.public_path.join('500.html'), layout: false, status: :internal_server_error
|
||||
end
|
||||
|
@ -23,15 +24,6 @@ class ErrorsController < ApplicationController
|
|||
render_error @status
|
||||
end
|
||||
|
||||
private
|
||||
|
||||
def render_error(status)
|
||||
respond_to do |format|
|
||||
format.html { render status: }
|
||||
format.json { render status:, json: { status:, name: Rack::Utils::HTTP_STATUS_CODES[status] } }
|
||||
end
|
||||
end
|
||||
|
||||
# Intercept errors in before_action when fetching user or roles
|
||||
# when db is unreachable so we can still display a nice 500 static page
|
||||
def current_user
|
||||
|
@ -45,4 +37,13 @@ class ErrorsController < ApplicationController
|
|||
rescue
|
||||
nil
|
||||
end
|
||||
|
||||
private
|
||||
|
||||
def render_error(status)
|
||||
respond_to do |format|
|
||||
format.html { render status: }
|
||||
format.json { render status:, json: { status:, name: Rack::Utils::HTTP_STATUS_CODES[status] } }
|
||||
end
|
||||
end
|
||||
end
|
||||
|
|
|
@ -3,6 +3,15 @@
|
|||
describe 'Errors handling', js: false do
|
||||
let(:procedure) { create(:procedure) }
|
||||
|
||||
scenario 'not found returns 404' do
|
||||
without_detailed_exceptions do
|
||||
visit '/nonexistent-path'
|
||||
end
|
||||
|
||||
expect(page).to have_http_status(:not_found)
|
||||
expect(page).to have_content('Page non trouvée')
|
||||
end
|
||||
|
||||
scenario 'bug renders dynamic 500 page' do
|
||||
procedure.revisions.destroy_all # break procedure
|
||||
|
||||
|
|
Loading…
Reference in a new issue