繁体   English   中英

Elixir / Phoenix LiveView:如何向Rollbar报告异常?

[英]Elixir / Phoenix LiveView: How can I report exceptions to Rollbar?

使用仍然测试版的Phoenix LiveView库,我玩得很开心。 我感到困惑的一件事是,如何确保发生异常时,LiveView能够以可预测和透明的方式运行。

在传统的基于HTTP请求的世界中,我希望该特定请求崩溃,返回500响应以及可能向用户指示“嘿,服务器有问题”的错误页面。 开发人员可以依靠诸如Rollbax这样的集成检测和报告异常,因此,我会收到有关该错误的电子邮件,并可以在Rollbar仪表板中对其进行检查。

但是当我的LiveView代码崩溃时,我没有得到保证。 LiveView进程将从崩溃中恢复,并且(据我所知)恢复到其上一个已知的正常状态,这确实很酷,但也会引起用户的沮丧(例如,“每次我提交表单时,都会向我显示一个加载图标,然后还原为空白表格”)。 而且我不清楚如何在LiveView中检测或捕获异常,以便可以将异常报告给Rollbar之类的错误监视服务。 (简短的不切实际的解决方案,例如向每个处理程序添加rescue

如何检测LiveView中发生的异常,以便a)以某种方式提醒最终用户该问题,以及b)确保将异常报告给开发人员?

但是当我的LiveView代码崩溃时,我没有得到保证。 LiveView进程将从崩溃中恢复,并且(据我所知)恢复到其最后一个已知的健康状态

LiveView处理恢复的方法是让客户积极地启动新的LiveView过程。 因此,在出现错误的情况下,当前的LiveView进程实际上将崩溃,这将向Elixir的Logger发送一条消息,该消息很可能被Rollbax拦截(我认为它已集成Logger)。 因此,当涉及到错误处理时,一切都应该正常工作。

如何检测LiveView中发生的异常,以便a)以某种方式提醒最终用户该问题,以及b)确保将异常报告给开发人员?

计划是在连接的挂载上出现错误将刷新页面,从而迫使请求通过常规的HTTP连接的请求,然后该请求将像在LiveView外部一样发出。 任何其他处理程序上的错误都将导致重新连接,然后重新连接,这将触发连接的挂载(然后可能还会失败并回退到HTTP)。 但是在所有这些情况下,都有一个过程,因此错误应该到达Rollbax。

一个可能会覆盖mount/2回调。 从Phoenix LiveView文档:

如果在有状态生命周期的任何时候遇到崩溃,或者客户端连接断开,则客户端会正常重新连接到服务器,并将其签名的会话传递回mount/2
https://github.com/phoenixframework/phoenix_live_view/blob/master/lib/phoenix_live_view.ex#L150-L153

就是说,如果您希望LiveView进程由于某种原因而变得僵尸,则可以例如维护连接的套接字列表以及时间戳,并在发生意外连接时发出警报。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM