Есть ли хорошие передовые практики для обработки исключений в рельсах? - PullRequest
2 голосов
/ 27 мая 2010

Я в настоящее время на Rails 2.3.5, и я стараюсь как можно лучше использовать исключения rescue_from в моем Приложении.

Мой спасатель ApplicationController теперь выглядит следующим образом:

  rescue_from Acl9::AccessDenied, :with => :access_denied
  rescue_from Exceptions::NotPartOfGroup, :with => :not_part_of_group
  rescue_from Exceptions::SomethingWentWrong, :with => :something_went_wrong
  rescue_from ActiveRecord::RecordNotFound, :with => :something_went_wrong
  rescue_from ActionController::UnknownAction, :with => :something_went_wrong
  rescue_from ActionController::UnknownController, :with => :something_went_wrong
  rescue_from ActionController::RoutingError, :with => :something_went_wrong

Я также хочу иметь возможность ловить любые исключения, не перечисленные выше. Есть ли рекомендуемый способ, которым я должен писать свои спасения?

Спасибо

Ответы [ 4 ]

5 голосов
/ 27 мая 2010

Вы можете перехватить более общие исключения, но вы должны поместить их сверху, как указано здесь

Например, чтобы перехватить все остальные исключения, вы можете сделать

rescue_from Exception, :with => :error_generic
rescue_from ... #all others rescues

Но если вы сделаете это, убедитесь, что вы хотя бы зарегистрировали исключение, или вы никогда не узнаете, что не так с вашим приложением:

def error_generic(exception)
  log_error(exception)
  #your rescue code
end

также вы можете определить несколько классов исключений в строке для одного обработчика:

  rescue_from Exceptions::SomethingWentWrong, ActiveRecord::RecordNotFound, ... , :with => :something_went_wrong
1 голос
/ 23 июня 2010

Вы можете определить метод подключения в ApplicationController следующим образом:

def rescue_action_in_public(exception)   
  case exception

  when ActiveRecord::RecordNotFound, ActionController::UnknownAction, ActionController::RoutingError
    redirect_to errors_path(404), :status=>301
  else
    redirect_to errors_path(500)
  end
end
1 голос
/ 27 мая 2010

возможно модуль уведомлений об исключениях плагин может вам как-то помочь

0 голосов
/ 27 сентября 2011

Недавно я выпустил гем rails 3 (egregious), который будет ловить распространенные исключения с помощью rescue_from и предоставлять четко определенные коды состояния http и ответы об ошибках для html, json и xml.

По умолчанию он пытается сделать правильные вещи. Вы можете добавить любые или изменить любые исключения и их коды состояния в инициализаторе.

Это может соответствовать или не соответствовать вашим потребностям. https://github.com/voomify/egregious

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...