【发布时间】: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 地址进入。我什至短暂地完全打开了防火墙,但这并没有产生不同的结果。
我已经检查了我能找到的每个主题和教程,包括:
- Cannot connect to Microsoft Azure from shinyapps.io
- Connecting Azure SQL databse to shinyapps.io
- https://groups.google.com/g/shinyapps-users/c/hs4bQHsk9JU
- https://docs.rstudio.com/shinyapps.io/applications.html#accessing-databases-with-odbc
除了传递给驱动程序参数的参数外,我的连接参数对于本地和 Web 部署保持不变。我错过了什么? Azure SQL 与 Shinyapps.io 根本不兼容吗?
【问题讨论】:
标签: r sql-server azure shiny odbc