部署到 Shinyapps.io 时无法连接到 Azure SQL

Cannot Connect to Azure SQL when deploying to Shinyapps.io

我构建了一个 R shiny app/dashboard,它可以在我的本地 Windows 10 机器上完美运行。我现在准备将它部署到网络上。我选择使用 Shinapps.io 来执行此操作。该应用程序已部署,但在尝试访问它时立即断开连接。检查日志文件会产生此错误:

Error : nanodbc/nanodbc.cpp:1021: 00000: [FreeTDS][SQL Server]Unable to connect: Adaptive Server is unavailable or does not exist [FreeTDS][SQL Server]Unable to connect to data source [FreeTDS][SQL Server]Unknown host machine name.

我目前连接数据库的实现如下:

conn_args <- config::get("dataconnection")

is_local<-Sys.getenv('SHINY_PORT')==""
message(paste("is_local: ", is_local))

if(is_local){
    con <- odbc::dbConnect(odbc::odbc(),
                           Driver = "ODBC Driver 13 for SQL Server",
                           Server = conn_args$server,
                           Database = conn_args$database,
                           Uid = conn_args$uid,
                           PWD = conn_args$pwd,
                           Port = conn_args$port,
                           TrustServerCertificate="no")
} else {
    #con <- RODBC::odbcDriverConnect("Driver=FreeTDS;TDS_Version=7.2;Server=tcp:#######;Port=1433;Database=######;Uid=######;Pwd=#######;Encrypt=yes;TrustServerCertificate=no;Connection Timeout=30")
    #con <- RODBC::odbcDriverConnect("Driver=FreeTDS;TDS_Version-7.2;Server=tcp:#######,1433;Database=###########;Uid=######;Pwd=######;Encrypt=yes;TrustServerCertificate=no;Connection Timeout=30;")

    con <- odbc::dbConnect(
                odbc::odbc(),
                Driver = "FreeTDS",
                Server = conn_args$server,
                Database = conn_args$database,
                UID = conn_args$uid,
                PWD = conn_args$pwd,
                Port = 1433,
                TrustServerCertificate="no",
                TDS_Version = 7.4
    )    
}

由于 ShinyApps.io 运行 Linux 实例,我使用 FreeTDS 作为部署驱动程序。我已经将 TDS_Version 调整为 7.0、7.1、7.2、7.4、8.0 和 9.0,并完全删除了该参数。最初我尝试根据 Shinyapps.io 文档建议使用“SQLServer”作为驱动程序名称,但也失败了。我什至尝试使用 RODBC 包而不是 odbc,但那也没用。

我已将我的 Azure 防火墙设置为允许所有必要的 IP 地址进入。我什至短暂地完全打开了防火墙,但这并没有产生不同的结果。

我检查了我能找到的每一个话题和教程,包括:

除了传递给驱动程序参数的参数外,我的连接参数对于本地和 Web 部署保持不变。我错过了什么? Azure SQL 是否与 Shinyapps.io 不兼容?

在这里找到答案:https://community.rstudio.com/t/unable-to-connect-to-azure-sql-database-in-shinyapps-io/45723

在 Azure 门户中,ODBC 连接字符串格式化服务器名称,如下所示:Server=tcp:servername.database.windows.net

虽然这在本地有效,但 shinyapps.io 不喜欢这种格式。我只需要从服务器名称中删除“tcp:”前缀,连接就可以通过:Server=servername.database.windows.net

我还将我的驱动程序更改为“SQLServer”,尽管“FreeTDS”仍然是一个可行的选择。如果您使用“FreeTDS”,请确保您有这个额外的参数:TDS_Version=7.2