我已经建立了一个R闪亮的应用程序/仪表盘,在我本地的Windows 10机器上完美运行。现在我准备将它部署到web上。我选择使用Shinapps.io来完成此操作。应用程序部署,但立即断开连接时,试图访问它。检查日志文件会产生以下错误:
Error: nanodbc/nanodbc.cpp:1021: 00000: [FreeTDS][SQL Server] able . Errorto connect: 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作为部署的驱动程序。我已经用7.0、7.1、7.2、7.4、8.0和9.0调整了TDS_Version,并完全删除了该参数。最初我尝试使用sqlserver;作为驱动程序的名称,根据Shinyapps。IO文档建议,但这也失败了。我甚至尝试使用RODBC
包而不是odbc
,但这也行不通。
我已经将Azure防火墙设置为允许所有必要的IP地址。我甚至短暂地完全打开了防火墙,但这并没有产生不同的结果。
我已经检查了我能找到的每一个线程和教程,包括:
- 无法从shinyapps.io连接到Microsoft Azure
- 连接Azure SQL数据库到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