我玩了很多乐趣,与Still-Beta Phoenix Liveview库一起玩。我感到困惑的一件事是如何确保我的Liveview在异常时以可预测和透明的方式行事。
在传统的基于HTTP-Request的世界中,我希望该特定的请求会崩溃,返回500响应,并可能向用户指示"嘿,服务器存在问题"的错误页面。开发人员可以指望诸如Rollbax检测和报告此例外的集成,因此我收到有关该错误的电子邮件,可以在Rollbar仪表板中进行检查。
但是当我的LiveView代码崩溃时,我没有得到此保证。Liveview过程将从崩溃中恢复,(据我了解(恢复到其最后一个已知的健康状态,这确实很酷,但也可能邀请用户沮丧恢复为空白形式"(。而且我还不清楚如何在LiveView中检测或捕获异常,以便可以将它们报告给Rollbar等错误监视服务。(缺乏不切实际的解决方案,例如向每个处理程序添加rescue
(
如何检测到LiveView中发生的异常,以便我可以a(以某种方式提醒最终用户问题,b(确保将异常报告给开发人员?
但是当我的LiveView代码崩溃时,我没有得到此保证。Liveview过程将从崩溃中恢复,(据我所知(恢复到其最后一个已知的健康状态
LiveView处理恢复的方式是让Clent启动新的LiveView过程。因此,如果发生错误,当前的LiveView进程实际上会崩溃,该过程将向Elixir的Logger发送一条消息,而Lodger很可能会被Rollbax拦截(我认为它具有Logger集成(。因此,在处理错误时,一切都应该起作用。
如何检测LiveView中发生的异常,以便我可以a(以某种方式提醒最终用户问题,b(确保将异常报告给开发人员?
计划是,连接的安装座上的错误将刷新页面,迫使请求通过常规的HTTP连接请求,然后像LiveView之外一样提出。任何其他处理程序上的错误都会导致重新连接,然后将触发连接的安装座(然后可能会失败并退回到HTTP(。但是在所有这些情况下,都有一个过程,因此错误应该到达Rollbax。
一个人可能会覆盖mount/2
回调。来自Phoenix Liveview文档:
如果在状态生命周期期间的任何时刻遇到崩溃,或者客户连接下降,客户端会优雅地重新连接到服务器,将其签名会话传递回
mount/2
。https://github.com/phoenixframework/phoenix_live_view/blob/master/master/lib/phoenix_live_view.ex#l150-l150-l153
也就是说,如果您希望您的Liveview过程由于某种原因成为僵尸,则可能会e。G。如果以预期的方式进行重新连接,请将连接插座的列表与时间戳一起使用。