You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Shiny应用部署至shinyapps.io出现服务器断开错误,疑似字体问题求助

问题原因排查与解决步骤

先澄清两个现象的真实关联

首先要明确:你在浏览器控制台看到的Source Sans Pro字体404加载失败,和应用提示"与服务器断开连接"没有直接因果关系。静态字体文件缺失只会导致页面字体回退、样式走样,不会直接触发Shiny的WebSocket连接中断。你之前的猜测只对了一半:本地Windows因为系统自带同款字体,就算应用自带的字体资源加载失败,浏览器也会自动调用系统字体渲染,完全感知不到404;而shinyapps.io的Linux运行环境没预装这个字体,才会把404信息打在控制台里,看起来和断连是同时触发的,本质是两个独立问题。
从你提供的服务器日志来看,断连的核心线索藏在容易被忽略的老版本依赖信息里,按下面的步骤一步步处理就行:

第一步:修复版本不兼容导致的WebSocket断连

你的日志里显示当前服务器跑的是2021年的老版本组合:R 4.0.2、shiny 1.6.0、httpuv 1.5.4。这个版本组合在Linux环境下存在已知的WebSocket心跳超时bug——本地Windows环境因为网络延迟低、链路短,触发不了这个bug;到了云端跨网络传输时,httpuv的心跳检测逻辑会因为超时自动断开连接,前端就会弹出"与服务器断开连接"的提示。
具体操作:

  • 部署前用renv做依赖版本锁定,不要让shinyapps.io自动拉取最新版的依赖包,强制让服务器安装和你本地开发完全一致的包版本。
  • 至少要核对shiny、shinydashboard、httpuv、htmltools四个核心包的版本和本地环境完全匹配,避免版本错位。

第二步:解决AdminLTE字体404的问题

这个问题是因为shinydashboard在打包部署时,经常漏带自带的静态字体文件,不用自己手动找字体资源补:

  • 在dashboardBody的最开头加一行资源挂载代码,强制加载shinydashboard自带的全部静态文件:
    dashboardBody(
      shinydashboard::useShinydashboard(), # 加在最开头
      tabItems(
        # 你原来的页面逻辑
      )
    )
    
  • 如果加完还是报字体404,就把本地R库路径下shinydashboard包目录里的www文件夹,整个复制到你应用项目的根目录(和app.R平级),部署时会自动把这些静态文件上传到服务器,覆盖原来漏传的路径。

第三步:排查未被日志捕获的运行时崩溃

你现在拿到的服务器日志只到包加载完成、启动端口监听的位置,后面的错误没有打出来,大概率是应用运行时触发了未捕获的R异常,直接把R进程搞崩了,前端才会弹断连提示。常见的触发场景:

  • 你代码里的sidebarMenuOutput("menu")对应的服务端输出逻辑,是不是用了Windows本地的绝对路径(比如C:/Users/xxx/xxx)去读数据、读图片?这类路径在Linux服务器上完全读不到,会直接抛异常让进程崩溃。
  • 部署前在app.R的最开头加一行配置,关掉Shiny的错误静默拦截:
    options(shiny.sanitize.errors = FALSE)
    
    配置完成后如果有运行时错误,页面会直接显示具体的报错位置和错误信息,不会再只弹模糊的"与服务器断开连接"提示。

最后补充:图标加载异常和字体问题同源,用上面的useShinydashboard()挂载资源后,Font Awesome的图标路径也会同步修正,不会再出现图标变方块的问题。

内容的提问来源于stack exchange,提问作者mee1988

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.24 02:54:03