将包含Leaflet的Shiny应用部署至shinyapps.io时遇到问题
看起来你在把这个带Leaflet的Shiny应用部署到shinyapps.io时卡壳了,我来帮你梳理几个部署时最容易踩的坑,从你的代码和项目结构入手调整:
1. 先干掉rstudioapi和setwd这两个部署杀手
你代码里的rstudioapi::getActiveDocumentContext()在shinyapps.io环境里完全用不了——毕竟那边没有RStudio的交互环境,加载这个包还会直接导致部署失败。而且setwd也没必要,shinyapps.io部署时默认的工作目录就是你的项目根目录(也就是mines_peru文件夹),直接用相对路径读数据就好。
修改后的数据读取部分应该是这样:
# 删掉这两行无用且报错的代码: # library(rstudioapi) # setwd(dirname(rstudioapi::getActiveDocumentContext()$path)) # 直接用根目录相对路径读数据 data_m <- readRDS('data/clean_active_mines.RDS') data_m <- data_m[!is.na(data_m$LongitudeD),]
2. 把紧凑的server代码拆开来,方便排错
你server里的renderLeaflet写得太紧凑了,万一中间哪步出错,根本找不到问题点。建议拆成分步执行的形式,可读性和排错性都会好很多:
server = function(input, output) { output$map = renderLeaflet({ # 第一步:过滤年份数据并转为sf对象 filtered_data <- data_m %>% filter(year == input$yeari) %>% st_as_sf() # 第二步:生成tmap可视化 tmap_obj <- tm_shape(filtered_data) + tm_dots() # 第三步:转成leaflet并设置初始视角 tmap_leaflet(tmap_obj, in.shiny = TRUE) %>% setView(-76, -10, 6) }) }
3. 确保所有依赖包都被正确声明
shinyapps.io会自动检测你加载的包,但最好确保所有用到的包都用library()加载了(比如你用到了dplyr的管道符,已经加载了没问题),另外记得把没用的包(比如rstudioapi)从library()列表里删掉。
4. 部署前先本地验证
在部署到shinyapps.io之前,一定要在本地把修改后的代码跑一遍,用runApp()启动应用,确保所有功能正常——如果本地都跑不通,部署肯定会失败。
5. 善用shinyapps.io的日志功能
如果调整后还是部署失败,直接去shinyapps.io的应用控制面板看部署日志,里面会有非常具体的错误提示:比如某个包没安装成功、数据路径不对、sf对象转换失败等等,这是排查问题最直接的线索。
先把这些调整落地,应该能解决大部分部署问题。如果还有具体的错误信息,随时贴出来我再帮你细化分析!
备注:内容来源于stack exchange,提问作者catatau

