【问题标题】:Script to guarantee app deploy using rsconnect:deployApp使用 rsconnect:deployApp 保证应用程序部署的脚本
【发布时间】:2020-10-13 19:45:11
【问题描述】:

我可以通过以下方式部署我的闪亮应用:

rsconnect::deployApp(appName = 'Test', launch.browser = FALSE, forceUpdate = T)

但是,它并不总是成功部署应用程序。我计划将此作为计划任务在脚本中运行,并希望确保 deployApp 成功完成(如果该过程不成功,请重试)

我想你可以将它放在while 循环中,但我不确定如何包含能够识别函数执行成功或失败的脚本。有人有想法吗?

错误信息:

Preparing to deploy application...DONE
Error: $ operator is invalid for atomic vectors

【问题讨论】:

  • 我不确定这是否明智。成功部署取决于您无法控制的因素(远程服务器的可用性、远程服务器上资源的可用性等)。如果您坚持“重复直到成功”,我可以看到以无限循环结束的可能性......
  • 即使这不是最明智的选择,你知道怎么可能吗?

标签: r deployment shiny


【解决方案1】:

应该这样做,但是“shinyapps.io”的管理员可能会因为你尝试这个而讨厌你。你可能很容易因为这样做而被禁止。您可能至少想要添加一个延迟,以便循环在每次失败后等待几分钟。

RepeatIt <- TRUE
while( RepeatIt ) {
  RepeatIt <- FALSE
  tryCatch(
    rsconnect::deployApp(appName = 'Test', launch.browser = FALSE, forceUpdate = T),
    error = function (x) {print(x); RepeatIt <<- TRUE}
  )
}

我也不确定这是如何作为计划任务工作的。

【讨论】:

  • 谢谢。我有一些测试要做。
【解决方案2】:

正如我在上面的评论中所说,我真的不认为这是一个好主意。要安全而稳健地完成这项工作将需要大量工作。而且您在上面引用的错误消息对我来说看起来很“不受控制”,所以我怀疑这与您的应用程序中的问题有关,而不是与发布过程的临时问题有关。在这种情况下,您处于无限循环中,除非您采取措施阻止它。您是否调查过您的发布记录和远程部署日志告诉您的信息?

也就是说,如果我必须这样做,这将是我的方法。

  1. 在全局环境中创建一个标志deploymentFlag,并将其设置为FALSE
  2. 写一个函数,onDeploymentFailure(),将deploymentFlag 设置为FALSE
  3. 像这样在while 循环中包装您对deployApp 的调用
while(!deploymentFlag) {
  deploymentFlag <- TRUE
  rsconnect::deployApp(
    ..., 
    on.failure=onDeploymentFailure, 
    logLevel="verbose", 
    recordDir=<some dir>
  )
  if (!deploymentFlag) {
    ...interrogate the publish record to try to determine what went wrong,
       and correct it if possible...
  }
}

为了安全起见,尤其是在开发和测试时,我会确保每次尝试都编写不同的发布日志,并且我会将最大尝试次数限制在一个非常小的数字:从 1 开始,然后是 2 或 3在我解决了最初的问题之后,等等。

【讨论】:

  • 谢谢。立即测试。
猜你喜欢
  • 2020-04-02
  • 2018-05-26
  • 1970-01-01
  • 2018-07-28
  • 2021-12-25
  • 2016-08-14
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多