Получить содержимое исключений в Rails Router
Поэтому я обрабатываю исключения с помощью контроллера ошибок для отображения динамического контента для моих пользователей в производстве. У меня есть это в моем файле маршрута, чтобы сделать:
# Errors
%w( 404 422 500 ).each do |code|
get code, :to => "errors#show", :code => code
end
Единственная проблема заключается в том, что теперь я маршрутизирую ошибки, такие как потеря информации в контроллере, когда я хочу уведомить Airbrake. Как я могу сохранить информацию об исключении и отправить ее в Airbrake на 500? Прямо сейчас все, что я получаю, это env, который происходил во время исключения, который менее полезен для целей отладки.
class ErrorsController < ApplicationController
def show
notify_airbrake(env)
render status_code.to_s, :status => status_code
end
protected
def status_code
params[:code] || 500
end
end
1 ответ
Вы обрабатываете ошибку, перенаправляя на URL-адрес, например http://your.site/500
? Это будет просто HTTP-запрос, как и любой другой, теряющий контекст исключения, который вы ищете. Вместо этого вы, вероятно, хотите использовать ActionController
Спасательная функциональность. Это будет выглядеть так:
class ApplicationController < ActionController::Base
rescue_from StandardError, with: :render_error
private
def render_error(error)
notify_airbrake(error)
render text: 500, status: 500
end
end
Вы можете добавить несколько rescue_from
объявления для обработки различных видов ошибок, таких как ActiveRecord::RecordNotFound
из примера руководства Rails.