У меня есть ванильное приложение Rails, состоящее только из простой модели Post
с заголовком и атрибутом содержимого.
Я взял пример исключения ActiveJob
из официального руководства по Rails, которое выглядит следующим образом:
class ExceptionTestJob < ApplicationJob
queue_as :default
rescue_from(ActiveRecord::RecordNotFound) do |exception|
logger.error("Could not find given post")
end
def perform(post_id)
post = Post.find(post_id)
end
end
Если я попытаюсь запустить задание с несуществующим идентификатором сообщения, я получу полную трассировку стека и сообщение об ошибке «Не удалось найти данное сообщение».
Я не хочу получать трассировку стека. Я просто хочу выполнить код, который находится в блоке rescue_from
. Как подавить трассировку стека?
Изменить:
Если я использую обычный rescue
внутри метода следующим образом:
class ExceptionTestJob < ApplicationJob
def perform(post_id)
begin
Post.find(post_id)
rescue ActiveRecord::RecordNotFound
logger.error("Could not find given post")
end
end
end
исключение будет перехвачено без обратной трассировки (как и предполагалось), но задание завершится как успешное: Performed ExceptionTestJob (Job ID: c21ce397-b19b-4464-9e53-696707b87dde) from Async(default) in 13.84ms
.