求助:在shinyapps.io使用bslib时含DT的Rmd文件渲染失败
解决shinyapps.io上bslib+DT+Rmd组合导致的pandoc内存不足错误(error 137)
问题复现场景
- 部署在shinyapps.io的Shiny应用,支持用户基于Rmd模板生成HTML报告
- 使用
bslib::page_fluid作为页面容器,且Rmd中调用DT组件渲染交互式表格 - 触发错误:
pandoc document conversion failed with error 137(该错误通常表示内存不足) - 本地运行完全正常;改用
shiny::fluidPage或Rmd中直接打印数据框而非DT时,shinyapps.io上也能正常运行
排查结论
该问题是shinyapps.io环境、bslib包、DT组件三者的组合兼容性问题,推测与shinyapps.io当前使用的pandoc版本对bslib样式+DT的处理逻辑有关,导致渲染时内存占用过高超出平台限制。
可行解决方案
临时替换页面容器
将bslib::page_fluid替换为shiny::fluidPage,无需修改其他业务逻辑,可快速恢复应用功能。调整Rmd中DT的渲染策略
- 若无需交互式表格,改用
knitr::kable()生成静态表格,大幅降低内存占用 - 若必须保留DT,添加配置限制资源消耗:
DT::datatable( your_data, options = list( pageLength = 10, # 限制每页显示行数 dom = 'ltipr', # 简化DOM元素,去掉不必要的组件 deferRender = TRUE # 延迟渲染,减少初始内存加载 ) )
- 若无需交互式表格,改用
指定一致的pandoc版本
在项目中添加_pandoc.yml文件,指定与本地运行一致的pandoc版本,避免环境版本差异:pandoc_version: 2.19.2 # 替换为你本地的pandoc版本也可通过
renv锁定环境依赖,确保shinyapps.io使用与本地相同的包版本。拆分Rmd渲染流程
将数据预处理与报告渲染分离:先在Shiny中完成数据计算,生成轻量的数据对象,再传入Rmd模板渲染,避免一次性加载过多资源到内存中。
Bug报告提交指引
若需向官方反馈问题,整理以下信息后提交:
- 可复现问题的最小示例代码(包含Shiny应用代码、Rmd模板)
- shinyapps.io上的完整错误日志
- 本地正常运行的
sessionInfo()输出 - 明确说明触发条件:仅在shinyapps.io +
bslib::page_fluid+ DT组件的组合场景下出现
提交渠道:
- 若怀疑是bslib或DT包的问题,提交到对应GitHub仓库的Issue板块
- 若确认是shinyapps.io环境问题,通过平台的支持工单系统提交反馈
内容的提问来源于stack exchange,提问作者jali
相关产品推荐
相关产品推荐

