Ресурсы JSONAPI - переопределить зарегистрированное сообщение при внутренней ошибке сервера?

Я нахожусь в процессе перехода к ресурсам JSONAPI в проекте Ruby on Rails, над которым я работаю, но я наткнулся на загвоздку - ошибки отладки, которые происходят в них. Я использую Papertrail в качестве решения для ведения журнала и использую их оповещения по электронной почте, чтобы получать уведомления при возникновении общих ошибок. До сих пор это работало замечательно, потому что я могу повторно вызвать исключение и сконцентрировать всю трассировку стека в одну строку журнала в сообщении, чтобы я мог получить электронное письмо от Papertrail со всей присутствующей трассировкой стека.

Кажется, я не могу найти способ сделать это с помощью ресурсов JSON API; ошибки, записанные в них, намного проще, что-то вроде этого:

Internal Server Error: Undefined method `foobar' for nil:NilClass app/path/to/the/thing.rb:12:in `do_the_thing'

Этой информации не всегда хватает, например, когда происходит сбой вызова метода ActiveRecord, поэтому я вынужден щелкнуть ссылку в сообщении электронной почты, чтобы перейти к сообщению в Papertrail и посмотреть на трассировку стека.

Я просмотрел их документацию, чтобы увидеть, есть ли способы настроить ведение журнала, но ничего не увидел. Кто-нибудь знает, есть ли способ добиться того, что я пытаюсь сделать? Спасибо!

ОБНОВЛЕНИЕ: я пролистал документацию еще и нашел многообещающее руководство:

Inside the finder methods (like records_for) or inside of resource callbacks (like before_save) you can raise an error to halt processing. JSONAPI::Resources has some built in errors that will return appropriate error codes. By default any other error that you raise will return a 500 status code for a general internal server error.

To return useful error codes that represent application errors you should set the exception_class_whitelist config variable, and then you should use the Rails rescue_from macro to render a status code.

Единственный недостаток, который я вижу, это то, что вам все еще нужно использовать Rails rescue_from макрос, чтобы вызвать нормальное исключение... так что это все еще не идеально.

ОБНОВЛЕНИЕ 2 (РЕШЕНИЕ): Я нашел довольно неуклюжий способ не дать ресурсам JSONAPI перехватывать исключения и позволить им всплывать в приложении, как обычно:

1) Существует параметр конфигурации, который называется exception_class_whitelist это принимает массив классов, в которых ресурсы JSONAPI не должны перехватывать возникшие исключения. Вы можете легко установить это для всех классов:

config.exception_class_whitelist` = [StandardError] + StandardError.descendants

2) Тогда по вашему ApplicationController установить rescue_from макрос для обработки повышенных исключений. Это может быть конкретным или широким, как вы хотите. Например, чтобы настроить общий обратный вызов для всех исключений:

class ApplicationController
  rescue_from(StandardError) do |exception|
    log_error
  end
end

0 ответов

Другие вопросы по тегам