我的 Shiny 应用程序不断与服务器断开连接。 这是我在 Posit 日志中不断收到的错误:
警告:评估错误:nanodbc/nanodbc.cpp:4616: 00000: [Microsoft][ODBC Driver 17 for SQL Server]通信链接失败
我的应用程序在本地运行得很好。我真的不认为这是由我的应用程序中的代码引起的,但如果是的话,那么什么样的编码错误会导致这种情况?
每当我在 Posit Connect 中更新我的应用程序时,也可以提供完整的上下文,它实际上可以运行大约一个小时,然后崩溃。作为临时解决方案,我不断在代码中添加注释并推送到 GitLab 作为更新应用程序的借口。
这是我多年来在项目中使用的方法,用于重新建立 SQL Server 与 R Shiny 应用程序的全局连接。
database_encoding = "latin1"
shinyServer(function(input, output, session) {
react <- reactiveValues(
my_connection_db1= 0
)
connexion_connection_react <- function () {
# react$my_connection_db1 is set at the beginning to 0 instead of NULL,
# for next connections, to know if there was an initial connection
if (!is.null(react$my_connection_db1)) {
tryCatch(
{
DBI::dbGetInfo(react$my_connection_db1)
},
error=function(e) {
print("Lost of connection my_connection_db1, try to reconnect (Errot)")
react$my_connection_db1<- tryCatch(
DBI::dbConnect(odbc::odbc(),
.connection_string=my_connection_db1_odbc_string,
encoding = database_encoding
)
, error=function(e) { NULL}
)
},
warning=function(w) {
print("Lost of my_connection_db1 (Warning)")
# warning but in this case
}
)
}
return(react$my_connection_db1)
}
...
}
在反应性组件中随处使用
Mydata <- reactive({
DBI::dbGetQuery(
connexion_connection_react(),
iconv(
paste0("SELECT * FROM TOTO ... WHERE ..."
"
),"UTF-8","latin1"
)
)
})
我最初的需求是在 2 个数据库(存档、实际)之间进行切换,具有类似的实现,但有 2 个连接。