Shinyapps.io не работает, когда мой блестящий использует RODBC для связи с базой данных SQL

На моем локальном компьютере я использую блестящий для разработки веб-страницы, чтобы показать результат анализа. Данные извлекаются из базы данных SQL компании с помощью RODBC, чтобы связать базу данных с R. Код выглядит следующим образом:

library(shiny)
library(shinydashboard)
library(DT)
library(RODBC)
library(stringr)
library(dplyr)
DNS <- '***'
uid <- '***'
pwd <- '***'
convertMenuItem <- function(mi,tabName) {
  mi$children[[1]]$attribs['data-toggle']="tab"
  mi$children[[1]]$attribs['data-value'] = tabName
  mi
}
sidebar <- dashboardSidebar(
  sidebarMenu(
    convertMenuItem(menuItem("Query1",tabName="Query1",icon=icon("table"),
                             dateRangeInput('Date1','Date Range',start = Sys.Date()-1, end = Sys.Date()-1,
                                            separator=" - ",format="dd/mm/yy"),
                             textInput('Office1','Office ID','1980'),
                             submitButton("Submit")), tabName = "Query1"),
    convertMenuItem(menuItem("Query2",tabName="Query2",icon=icon("table"),
                             dateRangeInput('Date2','Date Range',start = Sys.Date()-1, end = Sys.Date()-1,
                                            separator=" - ",format="dd/mm/yy"),
                             textInput('Office2','Office ID','1980'),
                             submitButton("Submit")), tabName = "Query2"),
  )
)
body <- dashboardBody(
  tabItems(
    tabItem(tabName="Query1",
            helpText('********************************'),
            fluidRow(
              column(12,DT::dataTableOutput('table1'))
              )
            ),
    tabItem(tabName = "Query2",h2("Widgets tab content"))
   )
)
dashboardheader <- dashboardHeader(
  title = 'LOSS PREVENTION'
) 
ui <- dashboardPage(
  skin='purple',
  dashboardheader,
  sidebar,
  body
)
server <- function(input, output) {
  output$table1 <- DT::renderDataTable({
    ch<-odbcConnect(DNS,uid=uid,pwd=pwd)
    a <- sqlQuery(ch,paste(' ***'))
    odbcClose(ch)
    DT::datatable(a,options = list(scrollX=T))
  })
}
shinyApp(ui, server)

Затем у меня есть учетная запись наshininapps.io. И используйте rsconnect для развертывания этой программы. И развертывание прошло успешно.

Но когда я использую https://myAccount.shinyapps.io/myshiny/ для доступа к своему коду. У меня есть следующая ошибка:

2018-05-10T00:57:38.473259+00:00 shinyapps[340325]: Warning in RODBC::odbcDriverConnect("DSN=****;UID=****;PWD=****") :
2018-05-10T00:57:38.473262+00:00 shinyapps[340325]:   [RODBC] ERROR: state IM002, code 0, message [unixODBC][Driver Manager]Data source name not found, and no default driver specified

Но если в моем коде нет базы данных RODBC и SQL, код работает нормально.

Итак, проблема в том, что Shinyapps.io не может получить доступ к базе данных SQL моей компании. Как я могу справиться с этим?


person Feng Chen    schedule 10.05.2018    source источник


Ответы (1)


Приложение работает на вашем компьютере, поскольку там настроено имя источника данных (DSN). Он не настроен на ShinyApps.io. Согласно эту справочную статью вы можете использовать, например

odbcDriverConnect('Driver=FreeTDS;TDS_Version=7.0;Server=<server>;Port=<port>;Database=<db>;Uid=<uid>;Pwd=<pw>;Encrypt=yes;TrustServerCertificate=no;Connection Timeout=30;')

Более полное описание можно найти в документации.

person Ralf Stubner    schedule 10.05.2018
comment
Спасибо. У меня тоже проблема с брандмауэром. Вся эта работа кажется мне сложной. - person Feng Chen; 10.05.2018