本地正常运行的Shiny App部署至shinyapps.io失败求助
Shiny应用部署至shinyapps.io的两类问题及解决方案
问题1:使用deployApp()部署时启动失败,提示找不到leafletOutput函数
错误信息
浏览器显示:An error has occurred. The application failed to start. exit status 1
日志错误:Error in leafletOutput("map") : could not find function "leafletOutput"
解决方案
- 强制重新安装依赖:本地加载
leaflet包不代表部署环境会同步安装对应版本,部署时添加clean = TRUE参数,强制shinyapps.io重新安装所有依赖:rsconnect::deployApp(appDir = "./ShinyApp", appName = "XXX", account = "XXX", clean = TRUE) - 确认包加载顺序:保证
library(leaflet)代码位于ui定义之前,确保函数在调用前已被加载。 - 清理本地部署缓存:删除本地应用目录下的
.rsconnect文件夹后重新部署,避免旧缓存干扰。
问题2:本地运行后点击publish时,出现Quarto检测错误
错误信息
── Preparing for deployment:heavy_check_mark: Deploying "ShinyApp" using server: shinyapps.io / username: XXXX Error in quartoInspect():! Failed to run quarto inspect against your content: ERROR: C./license_data.rds is not a valid Quarto inputdocumentBacktrace:▆ └─rsconnect::deployApp(...) └─rsconnect:::appMetadata(...) └─rsconnect:::inferQuartoInfo(...) └─rsconnect:::quartoInspect(appDir = appDir, appPrimaryDoc = appPrimaryDoc) └─cli::cli_abort(...) └─rlang::abort(...) Execution halted.
解决方案
- 隔离数据文件:将
.rds数据文件移至单独子目录(如data/),修改代码中的读取路径:
避免根目录下的数据文件被Quarto误识别为输入文档。postal_areas <- readRDS("data/postal_areas.rds") postal_areas_long <- as.data.table(readRDS("data/postal_areas_long.rds")) - 强制指定应用类型:部署时明确指定主文档为Shiny脚本,跳过Quarto检测:
rsconnect::deployApp(appDir = "./ShinyApp", appName = "XXX", account = "XXX", appPrimaryDoc = "app.R") - 添加忽略规则:在应用目录创建
.rsconnectignore文件,写入*.rds,阻止rsconnect扫描这类非脚本文件。
代码优化建议
- 移除
setwd("./ShinyApp"):部署时shinyapps.io会自动以应用目录为工作目录,使用相对路径更稳定。 - 推荐用
here包管理路径,彻底避免路径问题:library(here) postal_areas <- readRDS(here("postal_areas.rds"))
内容的提问来源于stack exchange,提问作者Kevin Short
相关产品推荐
相关产品推荐

