从RStudio部署交互式地图应用到ShinyApps.io时遇错误
问题:Shiny应用部署到ShinyApps.io时报错
setCurrentTheme未找到 本地运行正常的地理空间Shiny应用,部署到ShinyApps.io后启动失败,日志提示:
Warning: Error in setCurrentTheme: could not find function "setCurrentTheme"
用户已完成排查:代码中无setCurrentTheme显式调用,精简了依赖包,拆分组件到单独目录,重新部署后问题依旧。应用核心依赖为shiny、ggplot2、dplyr、sf。
排查与解决方案
1. 补全隐性依赖包
setCurrentTheme是bslib包的专属函数,大概率是依赖包的隐性调用导致:
- 本地环境可能自动加载了
bslib,但ShinyApps.io部署时未自动安装该包,需在代码开头显式添加library(bslib)声明依赖。 - 或在部署时通过
rsconnect::deployApp(dependencies = TRUE)强制让平台自动检测并安装所有隐性依赖。
2. 清理部署缓存
ShinyApps.io可能缓存了旧的依赖配置,导致新部署未更新环境:
- 部署时添加清理参数,强制重建环境:
rsconnect::deployApp(clean = TRUE)
3. 排除本地环境干扰
本地全局环境可能存在未在代码中声明的函数或变量,导致部署后缺失:
- 启动全新R会话,仅运行应用代码(不加载本地其他对象),验证是否能正常启动,排除本地环境的隐性依赖。
- 确保应用所需的
HLE_data、rename_map等数据,都通过read.csv()、readRDS()等方式在代码中显式加载,而非依赖本地全局环境。
4. 锁定依赖版本
本地与ShinyApps.io的包版本差异可能引发隐性调用错误:
- 用
sessionInfo()导出本地依赖包版本,在代码中添加版本校验,比如:stopifnot(packageVersion("shiny") >= "1.7.0", packageVersion("bslib") >= "0.4.0") - 或通过
renv工具生成依赖锁文件,确保部署环境与本地完全一致。
5. 替换主题函数测试
ggplot2::theme_minimal()在部分版本中可能间接调用bslib的主题功能:
- 临时替换为
theme_bw()等基础主题,重新部署测试,若错误消失,则说明是主题函数引发的隐性依赖问题,需显式声明bslib依赖。
内容的提问来源于stack exchange,提问作者Icarus
相关产品推荐
相关产品推荐

