簡體   English   中英

將閃亮的 R 應用程序部署到 shinyapps.io 會導致連接字符串出現 SQL 連接錯誤

[英]Deploying shiny R app to shinyapps.io gives SQL connectivity error for the connection string

嗨,我正在使用此連接字符串部署到 shinyapps.io,但它從不連接

con <- DBI::dbConnect(odbc::odbc(),
                      Driver = "SQLServer",
                      Server = "server",
                      Database = "db",
                      UID ="user",
                      PWD="pass",
                      Port = 1433)

它給出了這個錯誤:

Error in value[[3L]](cond) : 
  nanodbc/nanodbc.cpp:1021: 00000: [RStudio][SqlServer] Failed to locate Server/Instance Specified. 
Calls: local ... tryCatch -> tryCatchList -> tryCatchOne -> <Anonymous>

這里可能存在多個問題。

首先,您可能需要將 shinyapps.io 的 IP 地址列入白名單,完整列表可在此處獲得。 如果您的數據庫托管在 Azure 或 AWS 上,您可以輕松地在那里進行操作,或者請您的公司管理員提供幫助。

其次,您需要明確指定shinyapps.io 應該使用哪些驅動程序來訪問您的數據庫。 通常,當您從 R 本地連接到數據庫時,您指定Driver = "SQL Server"

但是,對於 shinyapps.io,它需要是Driver = "FreeTDS"

您需要設置一個函數來識別應用程序是否在本地運行,並使用相關的驅動程序。 如果是后者,您還需要指定端口和 TDS 版本,如下所示:

# Check if the app is being run locally or on the server
is_local <- Sys.getenv("SHINY_PORT") == ""

# A function to connect to the SQL database
dbConnector <- function(server, database, uid, pwd, local = TRUE, port = 1433, tds_version = 7.4) {
  
  # Local connect
  if (local) {
    DBI::dbConnect(
      odbc::odbc(), 
      Driver   = "SQL Server", 
      Server   = server,
      Database = database,
      UID      = uid,
      PWD      = pwd
    )
  } else {
    # Remote connect
    DBI::dbConnect(
      odbc::odbc(), 
      Driver      = "FreeTDS", 
      Server      = server,
      Database    = database,
      UID         = uid,
      PWD         = pwd,
      Port        = port,
      TDS_Version = tds_version
    )
  }
}

# Connect to the SQL database
con <- dbConnector(server, database, uid, pwd, is_local)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM