Elixir / Phoenix LiveView: Как сообщить об исключениях в Rollbar? - PullRequest
2 голосов
/ 24 июня 2019

Мне было очень весело играть с библиотекой Phoenix LiveView , все еще бета.Одна вещь, которая меня смущает, это то, как гарантировать, что мои LiveView будут вести себя предсказуемо и прозрачно, когда возникает исключение.

В обычном мире, основанном на HTTP-запросах, я бы ожидал, чтозапрос сбоя, возвращающий ответ 500 и, возможно, некоторую страницу с ошибкой, которая указывает пользователю «Эй, проблема с сервером».И разработчик может рассчитывать на такие интеграции, как Rollbax , обнаруживший и сообщивший об исключении, поэтому я получаю электронное письмо об ошибке и могу проверить ее на панели инструментов Rollbar.

Но когда мой LiveViewсбой кода, я не получаю эту гарантию.Процесс LiveView восстановится после сбоя и (насколько я понимаю) вернется к своему последнему известному здоровому состоянию, что действительно здорово, но также может вызвать разочарование пользователя (например, «Каждый раз, когда я отправляю вашу форму, он отображает значок загрузки, затемвозвращается к чистому виду ").И мне неясно, как я мог обнаружить или перехватить исключения в моем LiveView, чтобы о них можно было сообщить службе мониторинга ошибок, такой как Rollbar.(За исключением непрактичных решений, таких как добавление rescue к каждому обработчику)

Как я могу обнаружить исключения, которые происходят в LiveView, чтобы я мог а) каким-то образом предупредить конечного пользователя о проблеме и б) обеспечитьРазработчику сообщается об исключении?

Ответы [ 2 ]

2 голосов
/ 25 июня 2019

Но когда мой код LiveView дает сбой, я не получаю эту гарантию. Процесс LiveView восстановится после сбоя и (насколько я понимаю) вернется к своему последнему известному исправному состоянию

LiveView управляет восстановлением путем умелого запуска нового процесса LiveView. Таким образом, в случае ошибок текущий процесс LiveView фактически завершится сбоем, который отправит сообщение в Logger Elixir, который, скорее всего, будет перехвачен Rollbax (я предполагаю, что он имеет интеграцию Logger). Так что все должно работать, когда дело доходит до обработки ошибок.

Как я могу обнаружить исключения, возникающие в LiveView, чтобы я мог а) каким-то образом предупредить конечного пользователя о проблеме и б) убедиться, что об исключительной ситуации сообщается разработчику?

План состоит в том, что ошибка при подключенном монтировании обновит страницу, заставив запрос пройти обычный HTTP-подключенный запрос, который затем будет вызван, как это происходит вне LiveView. Ошибка в любом другом обработчике вызовет переподключение, которое затем вызовет подключенное монтирование (что также может привести к сбою и возврату к HTTP). Но во всех этих случаях есть процесс, поэтому ошибки должны поступать в Rollbax.

1 голос
/ 25 июня 2019

Можно переопределить mount/2 обратный вызов.Из документов Phoenix LiveView:

Если в какой-либо момент в течение жизненного цикла с состоянием происходит сбой или клиентское соединение прерывается, клиент изящно переподключается к серверу, передавая свой подписанный сеанс обратно mount/2.
https://github.com/phoenixframework/phoenix_live_view/blob/master/lib/phoenix_live_view.ex#L150-L153

Тем не менее, если вы ожидаете, что ваш процесс LiveView по какой-то причине станет зомби, вы можете e.г.вести список подключенных сокетов вместе с временными метками и сигнализацией, если повторные подключения происходят непредвиденным образом.

...