如何为长时间运行的R脚本及Shiny应用重部署脚本添加进度条
如何为长时间运行的R脚本及Shiny应用重部署脚本添加进度条
我太懂这种需求了——每次数据库更新后自动重部署Shiny应用,可部署过程总卡着看不到进度,频繁操作的话真的很闹心,而且网上搜出来的进度条例子大多是给循环用的,确实不太适配这种单步但耗时的部署操作。这里给你两种实用的方案,直接套进你的代码里就能用:
方案一:用基础R自带的txtProgressBar(无需额外装包)
基础R就自带文本进度条工具,不用额外安装包,适合快速实现。我们可以把部署流程拆成「准备配置」和「完成部署」两个关键阶段,用进度条节点来反馈状态:
# 初始化进度条:设置总步数为2,用带百分比的样式 pb <- txtProgressBar(min = 0, max = 2, style = 3, width = 50, label = "初始化部署...") # 第一阶段:配置账号信息 setTxtProgressBar(pb, 1, label = "正在配置账号信息...") library(rsconnect) rsconnect::setAccountInfo(name='joe', token='1AC4D3B9061349DC', secret='euAUwk6tOJg4IMztzSz3oBz') # 第二阶段:执行应用部署 setTxtProgressBar(pb, 1.5, label = "正在上传文件并部署...") rsconnect::deployApp( account = 'joe', appDir = file.path(getwd()), appFiles = c("app.R", "deer.db", "setPlace.R"), appId = "11278568" ) # 部署完成,拉满进度条 setTxtProgressBar(pb, 2, label = "部署完成!") close(pb) # 记得关闭进度条释放资源
方案二:用progress包实现更美观的动画进度条
如果想要更炫酷的终端进度条(带动态动画和自定义提示),可以用progress包,样式更友好:
首先先安装包(只需要装一次):
install.packages("progress")
然后修改你的部署脚本:
library(progress) # 初始化进度条:自定义格式,总步数设为2 pb <- progress_bar$new( format = "部署进度: [:bar] :percent | 当前状态: :msg", total = 2, clear = FALSE, width = 60 ) # 第一阶段:配置账号 pb$tick(0, tokens = list(msg = "正在初始化账号配置...")) library(rsconnect) rsconnect::setAccountInfo(name='joe', token='1AC4D3B9061349DC', secret='euAUwk6tOJg4IMztzSz3oBz') # 第二阶段:执行部署 pb$tick(1, tokens = list(msg = "正在上传文件并部署应用...")) rsconnect::deployApp( account = 'joe', appDir = file.path(getwd()), appFiles = c("app.R", "deer.db", "setPlace.R"), appId = "11278568" ) # 部署完成 pb$tick(2, tokens = list(msg = "部署成功!应用已更新"))
补充说明
因为rsconnect::deployApp本身没有暴露内部的上传进度钩子(比如没法实时获取每个文件的上传进度),所以我们用阶段式进度条来反馈状态,核心是让你知道脚本在正常运行,没有卡住。如果你的部署流程还有其他步骤(比如先备份数据库、同步数据),可以对应增加进度条的总步数,每个步骤推进一次进度条就行。
内容来源于stack exchange
相关产品推荐
相关产品推荐

