【问题标题】:Automatic reload of page when Sinatra app crashes (when thin server stops)Sinatra 应用程序崩溃时自动重新加载页面(当瘦服务器停止时)
【发布时间】:2015-07-15 11:33:22
【问题描述】:

我最近开始使用 Sinatra 框架路由(因为 Dashing.io 项目)。我的问题如下:

我在本地机器上运行了 dashing。我在http://localhost:3030/sample 上打开了我的仪表板。 假设我停止冲刺(ctrl+c,它也会停止瘦服务器)。我的仪表板仍然在那里,屏幕上有小部件,并且只有在我刷新浏览器时才会收到错误消息。

有没有办法在 dashing 关闭或瘦服务器停止时自动重定向到错误页面(说服务已关闭)?

我尝试过的事情:我有一个 python 脚本每秒运行一次,以检查是否有任何瘦/破折号的进程正在运行。如果没有找到进程,我尝试使用 dashing 的重新加载小部件重新加载页面。但后来我意识到我无法使用小部件,因为 dashing 已关闭。

我做了一些谷歌搜索以找到答案,但没有找到。有人可以请我指出正确的方向吗?

【问题讨论】:

  • 您可以编写一些客户端javascript,定期检查服务器是否处于活动状态,如果不活动则重定向页面。我不熟悉 dashing,所以我不能比这更具体。
  • 非常感谢您为我指明了正确的方向。

标签: ruby sinatra dashing


【解决方案1】:

Dashing 尝试优雅地处理用于获取小部件数据的 SSE(服务器发送事件)的连接问题。这适用于生产,但我可以看到它在开发过程中可能会令人困惑。

我能想到几个选项,都是客户端:

  • 获取浏览器插件,例如this one
  • 创建一个小部件,用于跟踪从作业发送给它的 heartbeat 并响应失败(通过重新加载或其他方式)

不幸的是,Dashing 根本没有公开 EventSource。另一种选择是附加您自己的错误处理程序。

Dashing中有一些代码,如果完全失败,最终会尝试刷新:https://github.com/Shopify/dashing/blob/c49e181cdb13d3357d76759e5311746ffe00f281/javascripts/dashing.coffee#L104-L110

如果连接完全断开,Dashing 将在 5 分钟后尝试刷新。

【讨论】:

  • 谢谢。我也会试试这个。当服务出现故障时,我设法使用@Max提到的javascript(在layout.erb文件上)刷新仪表板。我将对github.com/Shopify/dashing/blob/… 进行调整。
  • 如果有效,请使用它!仅在损坏的情况下进行修复-但在称其为损坏时要无情。
  • 谢谢。在确保它正常工作后,我将发布整个答案。感谢大家的宝贵指点。
  • 你最终找到了一个优雅的解决方案吗? @JermilaDhas ?
猜你喜欢
  • 1970-01-01
  • 2020-10-31
  • 1970-01-01
  • 1970-01-01
  • 2022-10-16
  • 2015-01-01
  • 1970-01-01
  • 2020-11-15
  • 1970-01-01
相关资源
最近更新 更多