You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何为长时间运行的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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.04.07 08:04:28