部署到 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 地址进入。我什至短暂地完全打开了防火墙,但这并没有产生不同的结果。
我检查了我能找到的每一个话题和教程,包括:
- 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 不兼容?
在这里找到答案: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
我构建了一个 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 地址进入。我什至短暂地完全打开了防火墙,但这并没有产生不同的结果。
我检查了我能找到的每一个话题和教程,包括:
- 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 不兼容?
在这里找到答案: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