在 Rails API 中向第三方发送错误数据的最佳位置在哪里?
Posted
技术标签:
【中文标题】在 Rails API 中向第三方发送错误数据的最佳位置在哪里?【英文标题】:Where's the best place to send error data to 3rd party in rails API? 【发布时间】:2022-01-12 05:43:28 【问题描述】:我们刚刚在我们的 rails 项目中实现了 Sentry。它应该会自动报告错误,但是因为我们需要对要发送给 Sentry 的数据进行更多控制,所以我们必须手动调用将数据发送给 Sentry 的方法。
目前,我们在主自定义错误类中调用 sentry
class OurCustomError < StandardError
def initialize(params)
super
ThirdParty::Sentry.new(params) # it contains the logic that will send our data to sentry
end
end
但是,我向我的伙伴们争辩说,不应该从那里调用该逻辑。因为错误类应该只是描述错误的对象。对 Sentry 的调用应该放在控制器的救援(或救援从)方法中
目前我们的控制器是这样的:
#...
rescue_from OurCustomError with: :render_error
def render_error(error)
render(
status: error.status
#etc
)
end
#...
我认为我们应该从这里(控制器)调用 Sentry,而不是自定义错误类本身。像这样的:
# ...
rescue_from OurCustomError with: :handle_custom_error
def handle_custom_error(error)
ThirdParty::Sentry.new()
render_error()
end
def render_error(error)
render(
status: error.status,
#etc
)
end
...
从最佳实践的角度来看,从自定义错误类内部还是从控制器调用逻辑更好?
【问题讨论】:
【参考方案1】:您不会让错误类负责向您的第三方服务报告错误,这对我来说是有道理的。正如你所说,它应该描述错误,并将报告错误的责任留给代码的其他部分。
理想情况下,您不需要手动向 Sentry 报告错误,因为 Sentry 提供了中间件来自动为您处理。您确定没有其他方法可以提供该自定义数据,这将允许您依赖所提供的错误捕获和报告吗? Sentry 可以将add extra data 与错误一起发送。
我们在 Honeybadger 中有类似的功能,我们还提供了一种方法来提供额外的数据 by the error object 或通过包含在上下文中的对象。我们还允许您搜索该上下文数据,因此我们强烈建议我们的客户使用该功能来报告有关错误的额外数据。
【讨论】:
以上是关于在 Rails API 中向第三方发送错误数据的最佳位置在哪里?的主要内容,如果未能解决你的问题,请参考以下文章
Rails 邮件发送:getaddrinfo:名称或服务未知