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

嵌入RMarkdown的Shiny应用部署成功后超时显示‘NOT FOUND’

问题分析与解决方案

核心问题

部署在shinyapps.io上的flexdashboard嵌入式Shiny应用,静态内容正常,但运行约1分钟后断开并显示NOT FOUND错误,重启仅临时恢复,调整超时设置无效。

代码问题排查

从提供的Shiny代码来看,存在以下关键错误:

  • 未正确加载数据:全局环境中调用df$name生成下拉选项,但注释了df <- read.fst(...)的加载代码;服务器端使用df3 <- by_owner,但by_owner未定义。这类未捕获的变量缺失错误会导致shinyapps.io强制终止应用进程。
  • 性能隐患:使用tableOutput渲染大型数据表,会一次性加载所有数据,极易触发内存不足,导致进程被杀死。

修复方案

1. 修正数据加载与渲染逻辑

调整代码,确保数据正确加载,并改用更高效的表格组件:

library(shiny)
library(dplyr)
library(fst)
library(DT)

ui <- fillPage(
  # 初始化空下拉,后续动态填充选项
  selectInput("filter", "Filter by Fuel Treatment:", choices = character(0)),
  # 用DT组件实现虚拟滚动,降低内存占用
  div(style="height: 900px; overflow-y: auto",
      DT::dataTableOutput("filtered_data"))
)

server <- function(input, output, session) {
  # 在服务器端加载数据,避免全局环境依赖
  df <- read.fst("data/fst_files/fuel_treatment_subset.fst")
  # 补充by_owner的实际定义,示例假设为df的衍生表
  df3 <- df %>% mutate(owner = "示例所有者") # 根据实际逻辑修改
  
  # 动态更新下拉选项
  updateSelectInput(session, "filter", choices = unique(df$name))
  
  # 响应式过滤数据
  filtered_data <- reactive({
    df3 %>% filter(name %in% input$filter)
  })
  
  # 渲染表格,启用虚拟滚动
  output$filtered_data <- DT::renderDataTable({
    filtered_data()
  }, options = list(scrollY = "850px", paging = FALSE, scrollCollapse = TRUE))
}

shinyApp(ui, server)

2. 优化shinyapps.io资源配置

  • 检查应用内存使用:若接近套餐上限(如免费套餐1GB),需缩小数据集,仅加载必要列,例如read.fst("xxx.fst", select = c("name", "必要列1", "必要列2"))
  • 调整应用设置:确保实例数≥1,将空闲超时时间设为套餐最大值(免费套餐为15分钟)
  • 若内存持续不足,考虑升级到更高套餐获取更多资源

3. 本地验证与部署

  • 本地运行修改后的代码,确认无报错、表格加载正常
  • 重新部署后,监控shinyapps.io应用面板的内存与CPU使用情况,确认是否仍出现断开问题

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.30 15:39:23