[英]Force rsconnect::deployApp() to fail to test 'on.failure'
我有一個shiny
應用程序,它每晚通過rsconnect::deployApp
使用批處理文件和計划任務更新。 此過程目前按預期運行,但目前確認整個過程成功的唯一方法是訪問應用程序並檢查時間戳是否更新。
?deployApp
顯示一個on.failure
選項,如果部署失敗,它將調用一個函數。 如果部署失敗,我知道如何使用它來發送通知,但我無法對其進行測試,因為我實際上無法使deployApp
函數失敗。
我曾嘗試在UI
放置錯誤,但該應用程序成功部署,盡管在查看器和 Shinyapps.io 上不起作用。
有沒有辦法強制deployApp
函數失敗,以便我能夠測試我正在創建的on.failure
函數?
# Global variables can go here
n <- 200
# Define the UI
ui <- bootstrapPage(
numericInput('n', 'Number of obs', n),
plotOutput('plot')
)
# Define the server code
server <- function(input, output) {
output$plot <- renderPlot({
hist(runif(input$n))
})
}
# Return a Shiny app object
shinyApp(ui = ui, server = server)
當前運行 R v. 4.0.2; rsconnect 0.8.16,閃亮的 1.5.0
編輯:我嘗試將q()
偷偷帶入應用程序。 它肯定會破壞應用程序,但不會干擾deployApp
。 搜索繼續!
我的猜測是on.failure
在部署中出現錯誤時觸發。 從這個角度來看,代碼中的錯誤( stop
甚至q
)僅在它篡改部署時觸發on.failure
。 由於在deployApp
沒有對代碼本身進行明顯的檢查,因此它可能不會像這樣工作。
查看底層rsconnect:::openURL
(使用on.failure
參數的地方),我們看到on.failure
在兩種情況下使用:
if (!is.null(client$configureApplication)) {
config <- client$configureApplication(application$id)
url <- config$config_url
if (!deploymentSucceeded && validURL(config$logs_url)) {
url <- config$logs_url
}
if (validURL(url)) {
if (deploymentSucceeded) {
showURL(url)
}
else if (is.function(on.failure)) {
on.failure(url) ## here
}
}
}
else if (deploymentSucceeded) {
showURL(application$url)
}
else if (is.function(on.failure)) {
on.failure(NULL) ## and here
}
所以我要做的測試是debug(rsconnect:::openURL)
,當瀏覽器打開時,我只需設置client$configureApplication <- NULL;deploymentSucceeded <- FALSE
並繼續代碼。
但是,查看代碼,我們看到將發生的所有事情是on.failure
被調用。 因此,直接調用on.failure
將具有相同的效果。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.