Несколько пользователей недавно рассказали людям, что у них есть опыт работы с пользовательским обработчиком ошибок Rails.
Одобрено: Fortect
Закон Мерфи:
Мерфи заявляет о соблюдении закона. Все, что может пойти не так, пойдет не так, вот почему так важно быть готовым к этому. Это применимо везде, даже в разработке персональных компьютеров. Приложение, которое мы разрабатываем, возможно, должно быть достаточно надежным, чтобы справиться с этим. Другими словами, он должен быть стабильным. Обычно это новая тема этого сообщения в блоге. Если
что-то пойдет не так, автоматически будет неправильное решение.
– Закон Мерфи
В Rails, рабочем процессе, давайте разберемся с ошибками в выписке по счету уровня. Например, предположим, что вы пишете один API с помощью Rails. Рассмотрим следующий контроллер в качестве альтернативы отрисовке пользовательского JSON.
Если элемент истории найден, он будет отображаться как любой конкретный Json, в противном случае он вернет ошибку json. Это действительно типичный способ доставки текущего метода в Rails. Но вот загвоздка. Если регистрация пользователя не начинается, ситуация не перескакивает на препятствие else, а вместо этого отображает содержимое Fallback-500.html. Что ж, большинство из них было неожиданным. Это связано с тем, что, но если запись не найдена, возникает ваша фактическая ошибка RecordNotFound. То же самое, учитывая, что find_by! или любым методом Finder на ура.
Исключение! Включает ошибку
Прежде чем мы сможем справиться с ошибками, нам нужно понять что-то значимое. Как видно из приведенного выше продукта, мы получаем ошибку ActiveRecord :: RecordNotFound. Попытка поймать рубин будет выглядеть примерно так, и это нормально.
Но если вы хотите избежать исключений в первую очередь, на рынке действительно важно знать разницу между исключением и все ошибки Ruby. Никогда не спасайся от исключения. Он направлен на обработку каждого исключения, вызванного классом исключения, индивидуально и в конечном итоге сокращает само выполнение.
Вместо этого нам нужно выполнить спасение самостоятельно с помощью StandardError. Вот отличная тема на веб-сайте, объясняющая последствия, которые я испытываю http://blog.honeybadger.io/ruby-exception-vs-standarderror-whats-the-difference/.
Спасение
Чтобы справиться с настоящими ошибками, каждый из нас может использовать блокировку сбоев. Блок восстановления обычно такой же, как блок try..catch, если вам нужно из мира Java. Вот та же копия в точке а с полностью свободным блоком.
При таком подходе ваши ошибки регистрируются с использованием способов и средств контроллера. Хотя это работает нормально, это определенно не лучший подход к устранению неполадок. Вот несколько оправданий отличного альтернативного подхода.
- Жир Прочтите свою идеальную статью о Thoughtbot https://robots.oughttbot.com/skinny-controllers – Худые модели.
- Принцип DRY-We: достаточно повторить блокировку ошибки в разных точках, что обычно нарушает принцип DRY (Don’t Repeat Yourself).
- Ремонтопригодность: сложнее управлять кодом. Изменяет ошибку, а также формат повлечет за собой серьезные изменения.
Возобновляемым подходом был бы блок обработки ошибок вращения для ApplicationController. Подход к удалению – это написать хороший обработчик сегмента ошибки.
Обработка ошибок – модульный подход
Чтобы своевременно исправить ошибки макета, каждый первый вариант должен пометить его в каждом ApplicationController. Но лучше отделить их от бизнес-логики.
Давайте создадим лучший модуль, который глобально обрабатывает ошибки. Создайте настоящий модуль ErrorHandler (error_handler.rb) и поместите его в lib / error (или где-нибудь для загрузки) и, наконец, включите наш ApplicationController.Load
Важно: чтобы этот конкретный модуль ошибок в приложении запускался непосредственно с раскрытием в config / application.rb.
Примечание: я использую несколько модулей, чтобы помочь разным типам с помощью рендеринга вывода json. Можете ли вы проверить это ниже?
Прежде чем вы начнете работать с каждым модулем error_handler, вот интересная статья о модулях, которую вы должны полностью изучить. Если все используют в курсе метод «наблюдать за собой.included», связанный метод ведет себя так, как если бы он был включен в исходный класс. Итак, у меня действительно есть только модуль ErrorHandler, который представлен в ApplicationController.
давайте действовать Давайте добавим весь ErrorModule в блоки обработки ошибок. Вроде так.
Если все видят ошибки ActiveRecord: RecordNotFound, StandardError также передается. Поскольку для этого у нас есть специальный резервный механизм, мы получаем полное: record_not_found. Блок StandardError действует как единый резервный механизм, который обрабатывает все ошибки.
Определите собственное исключение.
Более того, мы можем определить наш собственный класс ошибок, который наследуется от StandardError. Чтобы упростить задачу, мы можем сформировать новый класс CustomError, который будет содержать функции, а также методы, общие для всех классов, известных как ошибочные. Наша настраиваемая ошибка теперь расширяет то, что CustomError.
Мы можем перезаписать системные настройки при каждой ошибке. Пример NotVisibleError расширяет CustomError. Как видите, некоторые люди переопределяют error_message.
Чтобы исправить пользовательские ошибки, нам почти не нужно выполнять спасение клиента Error. Мы также можем сохранить экспресс-ошибку, если вы снова захотите исправить ее по-другому.
404 и Can 500
обрабатывать общие исключения действительно нравятся 404 и 500, хотя это делается просто путем кражи для разработчика. Нам нужно создать там отдельный класс контроллера для проверки ошибок.
сообщает Rails использовать маршруты для разрешения исключений. строка, соответствующая application.rb.
config.Exceptions_app подразумевает маршруты
теперь вызывает откат для ошибок # not_found и 500 для количества ошибок internal_server_error.
Заключительные замечания
Одобрено: Fortect
Fortect — самый популярный и эффективный в мире инструмент для ремонта ПК. Миллионы людей доверяют ему обеспечение быстрой, бесперебойной и безошибочной работы своих систем. Благодаря простому пользовательскому интерфейсу и мощному механизму сканирования Fortect быстро находит и устраняет широкий спектр проблем Windows — от нестабильности системы и проблем с безопасностью до проблем с управлением памятью и производительностью.
а>
Модульный подход – это курс Rails по работе с ошибками. Всякий раз, когда мы хотим изменить уникальное сообщение / формат об ошибке, мы оставляем за собой право изменить это в нашем решении. С помощью этого метода мы также отделяем наиболее важное разумное приложение от обработки ошибок, делая контроллеры более плавными, чем дерзкими. Лучшие
боковые направляющие для поездов для тонких контроллеров и моделей.
Это полный исходный код программного обеспечения для обработки ошибок с использованием метода переворота. Пожалуйста, нажмите кнопку «Рекомендовать», если профессионал сочтет это полезным. И вы всегда можете ответить, если у вас возникнут практические сомнения. Модульный htc bravo!
Подход к устранению препятствий на рельсах.
Повысьте производительность вашего компьютера с помощью этой простой загрузки. г.
г.