Автоматическая перезагрузка страницы при сбое приложения Sinatra (при остановке тонкого сервера)

Совсем недавно я начал играть с роутами Sinatra framework (из-за проекта Dashing.io). Мой вопрос заключается в следующем:

У меня лихо работает на моей локальной машине. И моя панель инструментов открыта по адресу http://localhost:3030/sample. Скажем, я перестаю лихо работать (ctrl+c, что также останавливает тонкий сервер). И моя панель инструментов все еще находится там с виджетами на экране, и я получаю сообщения об ошибках ТОЛЬКО при обновлении браузера.

Есть ли способ автоматически перенаправить на страницу с ошибкой (с сообщением о том, что служба не работает), когда тире выходит из строя или когда тонкий сервер останавливается?

Вещи, которые я пробовал: у меня каждую секунду запускался скрипт python, чтобы проверить, есть ли какие-либо тонкие/лихие процессы. Если процесс не найден, я пытался использовать виджет перезагрузки dashing для перезагрузки страницы. Но позже я понял, что не могу использовать виджет, потому что лиха не работает.

И я немного погуглил, чтобы найти ответ, но не нашел. Может ли кто-нибудь указать мне в правильном направлении, пожалуйста?


person Jermila Dhas    schedule 15.07.2015    source источник
comment
Вы можете написать некоторый javascript на стороне клиента, который периодически проверяет, жив ли сервер, и перенаправляет страницу, если это не так. Я не знаком с лихими, поэтому я не могу быть более конкретным, чем это.   -  person Max    schedule 15.07.2015
comment
Большое спасибо за то, что указали мне правильное направление.   -  person Jermila Dhas    schedule 16.07.2015


Ответы (1)


Dashing пытается изящно обработать проблемы с подключением с помощью SSE (событие, отправленное сервером), которое используется для получения данных виджета. Это хорошо работает для производства, но я вижу, как это может сбивать с толку во время разработки.

Есть несколько вариантов, которые я могу придумать для этого, все на стороне клиента:

  • Установите надстройку для браузера, например эту.
  • Создайте виджет, который отслеживает пульс, отправленный ему с задания, и реагирует на сбой ( перезагрузкой или чем-то еще)

К сожалению, Dashing вообще не предоставляет EventSource. Другим вариантом было бы прикрепить к этому свой собственный обработчик ошибок.

В Dashing есть некоторый код, который в конечном итоге попытается обновиться в случае полного сбоя: https://github.com/Shopify/dashing/blob/c49e181cdb13d3357d76759e5311746ffe00f281/javascripts/dashing.coffee#L104-L110

Если соединение полностью потеряно, Dashing попытается обновиться через 5 минут.

person tylermauthe    schedule 21.07.2015
comment
Спасибо. Я тоже попробую этот. Мне удалось обновить панель инструментов, когда служба отключается, используя javascript (в файле layout.erb), как упоминал @Max. Я собираюсь внести изменения в github.com/Shopify /dashing/blob/. - person Jermila Dhas; 11.08.2015
comment
Если это работает, просто используйте его! Ремонтируйте вещи только в том случае, если они сломаны, но будьте безжалостны, называя вещи сломанными. - person tylermauthe; 12.08.2015
comment
Спасибо. Я опубликую весь ответ после того, как убедюсь, что он работает правильно. Спасибо всем за ваши ценные указания. - person Jermila Dhas; 13.08.2015
comment
Вы нашли элегантное решение для этого в конце концов? @JermilaDhas ? - person Daniel; 14.12.2015