在R shiny app上显示部署时间

ckx4rj1h  于 2023-01-28  发布在  其他
关注(0)|答案(1)|浏览(164)

我有一个闪亮的应用程序,大约每周都会使用rsconnect包重新部署到www.example.com。shinyapps.io using the rsconnect package.
在应用程序的首页上,我希望显示应用程序上次部署的时间。
我认为这是可能的,通过这样做:

library(shiny)

deployment_time <- lubridate::now()

ui <- fluidPage(

  p(glue::glue("Deployment time {deployment_time}"))
)
server <- function(input, output) {

}

shinyApp(ui = ui, server = server)

这背后的原因是deployment_time是随服务器一起设置的,因此应该只在部署应用程序时运行一次,而不是在用户稍后查看应用程序时运行。
然而,我观察到的行为是,在加载应用程序几次之后,部署时间将更新为当前时间,这表明此代码实际上在某个时间点重新运行。
你知道这是怎么回事吗?我如何设置一个部署时间,而不必在脚本中手动设置日期?
提前感谢:)

xuo3flqw

xuo3flqw1#

我会将最后一次部署日期存储在一个本地文件中,该文件将与应用程序代码一起上传到您的Shiny Server。
以下是一个可重复性最低的示例。

部署记录

首先是一个只在部署应用程序时运行的函数,您可以花一些时间将此函数插入到部署脚本中,以便它写入将文件上载到服务器之前的时间。

#' Record the date of app deployment.
record_deployment_date <-
  function(deployment_history_file = "deployment_history.txt") {
    # make sure the file exists...
    if (!file.exists(deployment_history_file)) {
      file.create(deployment_history_file)
    }
    
    # record the time
    deployment_time <- Sys.time()
    cat(paste0(deployment_time, "\n"),
        file = "deployment_history.txt",
        append = TRUE)
  }

然后,您将使用另一个函数来访问上次记录的部署日期。

#' Return the last recorded deployment date of the application.
load_deployment_date <-
  function(deployment_history_file = "deployment_history.txt") {
    deployment_history <- readLines(deployment_history_file)
    
    # return the most recent line
    deployment_history[[length(deployment_history)]]
  }

最小应用程序示例

最后,您可以调用前面的函数并将加载的文本插入到renderText函数中,以显示您的最后部署日期。

ui <- fluidPage(mainPanel(tags$h1("My App"),
                          textOutput("deploymentDate")))

server <- function(input, output, session) {
  output$deploymentDate <- renderText({
    paste0("Deployment Time: ", load_deployment_date())
  })
}

shinyApp(ui, server)

当然,你会想要改变你的deployment_history.txt文件的位置,自定义你的时间格式,等等。你可以进一步包括部署版本。但是,这是你需要开始的最少信息。

相关问题