¿Hay alguna forma de capturar todas las excepciones no detectadas en un controlador de rieles, como esta?
def delete
schedule_id = params[:scheduleId]
begin
Schedules.delete(schedule_id)
rescue ActiveRecord::RecordNotFound
render :json => "record not found"
rescue ActiveRecord::CatchAll
#Only comes in here if nothing else catches the error
end
render :json => "ok"
end
Gracias
ruby-on-rails
Neigaard
fuente
fuente
rescue => e
bloque solamente?También puede definir un método rescue_from.
Dependiendo de cuál sea su objetivo, es posible que también desee considerar NO manejar excepciones por controlador. En su lugar, use algo como la gema exception_handler para administrar las respuestas a las excepciones de manera consistente. Como beneficio adicional, este enfoque también manejará las excepciones que ocurren en la capa de middleware, como el análisis de solicitudes o los errores de conexión de la base de datos que su aplicación no ve. La gema exception_notifier también puede ser de interés.
fuente
rescue_from Exception
? Tengo entendido que es mejor rescatarStandardError
, por lo que las cosas comoSyntaxError
yLoadError
no se capturan.Puede detectar excepciones por tipo:
fuente
Exception
directamente; ver stackoverflow.com/questions/10048173/…rescue
sin argumentos rescatará cualquier error.Entonces, querrás:
fuente
En realidad, si realmente desea capturar todo , simplemente cree su propia aplicación de excepciones, que le permite personalizar el comportamiento que generalmente maneja el middleware PublicExceptions: https://github.com/rails/rails/blob/4-2 -stable / actionpack / lib / action_dispatch / middleware / public_exceptions.rb
Muchas de las otras respuestas comparten gemas que hacen esto por ti, pero realmente no hay razón para que no puedas simplemente mirarlas y hacerlo tú mismo.
Una advertencia: asegúrese de nunca generar una excepción en su controlador de excepciones. De lo contrario, obtienes un feo FAILSAFE_RESPONSE https://github.com/rails/rails/blob/4-2-stable/actionpack/lib/action_dispatch/middleware/show_exceptions.rb#L4-L22
Por cierto, el comportamiento en el controlador proviene de rescuable: https://github.com/rails/rails/blob/4-2-stable/activesupport/lib/active_support/rescuable.rb#L32-L51
fuente