r语言 - 无法从 shinyapps.io 连接到Microsoft Azure



我构建了一个从Azure中提取数据的Rshiny应用程序Microsoft。当我在连接字符串中使用"SQL Server"驱动程序时,我的应用程序在本地工作,但在 shinyapps.io 上发布应用时不起作用。根据这里的建议,我一直在尝试使用"FreeTDS"驱动程序在 shinyapps.io 上发布时与 Azure 连接,但我没有任何运气。

这是我的连接字符串:

con <- dbConnect(odbc::odbc(),
                 Driver = "FreeTDS",
                 Server = "servername", 
                 Database = "databasename",
                 Uid = "uid",
                 Pwd = "pwd",
                 Port = 1433,
                 TDS_Version = 9.0)

我在使用"FreeTDS"驱动程序时收到以下错误消息:

Error in value[[3L]](cond) : 
  nanodbc/nanodbc.cpp:950: 08001: [unixODBC][FreeTDS][SQL Server]Unable to connect to data source 

我尝试使用TDS_Version 7.0、7.2、7.4、9.0 - 没有一个有效。谁能帮我解码此错误消息?谢谢!

注意:我正在Windows 10上使用R 3.6。我已将 Azure 上的 shinyapps.io IP 地址列入白名单,因此这不是问题所在。

为了在本地 Windows 和 Shinyapps.io 上进行连接,这对我有用:

library(RODBC)
is_local<-Sys.getenv('SHINY_PORT')==""
dbConnector <- function(local=FALSE){
    if(local){dbConn <- odbcDriverConnect("Driver=ODBC Driver 13 for SQL Server;Server=xxx.database.windows.net,1433;Database=xxxxxxxxx;Uid=xxxx;Pwd=xxxxxxxxx;Encrypt=yes;TrustServerCertificate=no;Connection Timeout=30")
        } else {dbConn <- odbcDriverConnect("Driver=FreeTDS;TDS_Version=8.0;Server=xxxx.database.windows.net; Port=1433;Database=xxxxx;Uid=xxxxxx;Pwd=xxxxxxxxx;Encrypt=yes;TrustServerCertificate=no;Connection Timeout=30")}
}
dbConn <- dbConnector(is_local)

驱动程序要求仅在连接字符串上指定 DSN 和 PWD,不能在 DSN 中指定它们。 http://www.freetds.org/userguide/odbcconnattr.htm

有关更多详细信息,请参阅类似 GitHub 问题,该问题解决了类似问题。

希望这有帮助。

最新更新