R Studio Shiny Server - оператор $ недействителен при использовании сценариев SQL

Кто-нибудь сталкивался с его проблемой? У меня есть блестящее приложение, которое использует файлы SQL для импорта данных с сервера MS SQL с помощью пакета RODBC. Я сузил проблему до файла server.R:

ch <- odbcConnect(dsn = xxxxxx)
iQry <- readChar("LeaderDashInd.sql", file.info("LeaderDashInd.sql")$size, T)
oQry <- readChar("LeaderDashOrg.sql", file.info("LeaderDashOrg.sql")$size, T)
iDat <- sqlQuery(channel = ch, query = iQry, stringsAsFactors = F)
oDat <- sqlQuery(channel = ch, query = oQry, stringsAsFactors = F)
odbcClose(ch)

# PREPROCESSING --------------------------
cy <- max(iDat$CampYear)

Приложение останавливается на последней строке выше и выдает ... Ошибка в iDat $ CampYear: оператор $ недопустим для атомарных векторов. Я знаю, что этот кусок является проблемой, потому что, когда у меня есть одно и то же приложение, работающее с импортированными CSV-файлами, оно работает.

Несколько замечаний:

  1. Этот код сначала запускается в файле server.R вне функции shinyServer.
  2. Приложение работает нормально при запуске с моей рабочей станции через R Studio. Он перестает работать только при запуске на нашей установке Shiny Server.
  3. Блестящие пакеты обновлены, а блестящий сервер установлен недавно.

Есть предположения?


person jtdoud    schedule 08.09.2016    source источник
comment
Что такое class(iDat)? Какой именно тип запроса вы выполняете? Не похоже, что вы получаете обратно data.frame. Может быть, вы получаете сообщение об ошибке.   -  person MrFlick    schedule 08.09.2016
comment
Если он работает на вашей рабочей станции, но не работает на сервере, это заставляет меня думать, что LeaderDashInd.sql может не находиться в рабочем каталоге на сервере.   -  person Benjamin    schedule 08.09.2016
comment
iDat - это фрейм данных. Но да, в серверной версии этого могло и не быть по какой-то необъяснимой причине. Основываясь на некоторых других решениях по устранению неполадок, которые я делал, похоже, что это суть проблемы ... Не импортировать как фрейм данных. Да файлы SQL находятся в wd на сервере.   -  person jtdoud    schedule 08.09.2016


Ответы (1)


К вашему сведению ... изменение SQL-запроса на хранимую процедуру и последующий вызов хранимой процедуры с RODBC::sqlQuery устранили проблему. Возникла ошибка $ operator invalid, потому что запрос не выполнялся и возвращал пустой вектор.

По-прежнему не объясняет, почему автономный запрос с использованием readChar не работает в Shiny Server, но эй ... это исправление.

person jtdoud    schedule 09.09.2016