【问题标题】:Cannot Connect to Azure SQL when deploying to Shinyapps.io部署到 Shinyapps.io 时无法连接到 Azure SQL
【发布时间】:2021-10-31 04:31:28
【问题描述】:

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

错误:nanodbc/nanodbc.cpp:1021:00000:[FreeTDS][SQL Server]Unable 连接: Adaptive Server 不可用或不存在 [FreeTDS][SQL Server]无法连接到数据源 [FreeTDS][SQL 服务器]未知的主机名。

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

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 根本不兼容吗?

【问题讨论】:

    标签: r sql-server azure shiny odbc


    【解决方案1】:

    在这里找到答案: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

    【讨论】:

    • 请添加更多详细信息以扩展您的答案,例如工作代码或文档引用。
    猜你喜欢
    • 2019-10-22
    • 2021-09-03
    • 2022-11-10
    • 2018-01-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多