我们最近能够获得一个小型的redhat服务器来试验闪亮的服务器。我们的IT部门运行了闪亮的服务器并安装了Oracle客户端,但我无法让ROracle在闪亮的服务器上工作。他们(IT)已经决定这是一个应用程序问题,并开始放弃......
最初ROracle根本没有在服务器上运行,但是我们通过在我的.bashrc文件中设置LD_LIBRARY_PATH来使用我的用户帐户。完成后我可以登录服务器,从R查询数据库。我甚至可以使用runApp()从R运行我的闪亮应用程序。
当我尝试通过闪亮服务器访问同一个应用时,我收到以下错误:
Listening on port 40679
Loading required package: DBI
Error in dyn.load(file, DLLpath = DLLpath, ...) :
unable to load shared object '/usr/lib64/R/library/ROracle/libs/ROracle.so':
libclntsh.so.11.1: cannot open shared object file: No such file or directory
Error : package or namespace load failed for 'ROracle'
Error : package or namespace load failed for 'ROracle'
这是我在设置LD_LIBRARY_PATH变量之前在我的帐户上遇到的相同错误。服务器以用户闪亮的方式运行,但显然不会运行任何启动脚本,因此为我的用户修复它不会为闪亮的用户修复它。这远远超出了我的知识领域,正如我所说,我们的IT部门表示他们没有想法。
我没有sudo访问服务器所以我可以尝试的东西是有限的。我尝试从我的server.R脚本设置LD_LIBRARY_PATH,然后使用Sys.setenv()和使用system()加载ROracle,但这些不起作用。我们一直试图帮助我的DBA尝试在/etc/init/shiny-server.conf中设置LD_LIBRARY_PATH,但这似乎也不起作用。
我真的希望这里有人有一些想法。
由于
答案 0 :(得分:4)
经过几天令人沮丧的日子后,我找到了解决方案。您需要在位于/etc/init/shiny-server.conf的upstart脚本中设置LD_LIBRARY_PATH
变量,但是对于upstart documentation,您需要使用env
关键字对其进行定义。所以补充:
env LD_LIBRARY_PATH=/usr/lib/oracle/11.2/client64/lib:$LD_LIBRARY_PATH
到shiny-server.conf脚本的开头似乎解决了这个问题。
答案 1 :(得分:3)
这是我的博客文章(大约一年前),详细描述了如何让R Studio Server与Oracle合作。 LD_LIBRARY_PATH
,OCI Lib和所有的东西都提供了。也许这有助于其他人:http://learnfrominfo.tumblr.com/post/38382388429/connect-r-studio-server-to-an-oracle-database-with
答案 2 :(得分:1)
我遇到了与PHP和Apache相同的问题。
请参阅PHP文档中的Setting the Oracle Environment。
另外,请参阅注释 - 您在/etc/init/shiny-server.conf中使用了哪种语法?
答案 3 :(得分:0)
SERVER.R
library
library(RMySQL)
library(caTools)
library(rpart)
library(RJDBC)
shinyServer(
function(input ,output)
{
dvr =JDBC("oracle.jdbc.OracleDriver",classPath="D:/ojdbc6.jar")
url = ""
user = ""
password = ""
jd =dbConnect(dvr,url, user, password)
a1 <- eventReactive(input$predict,
{
a<-input$ref
table2<-data.frame(dbGetQuery(jd,paste0("
select colnames from Tablename where REFNO=",a," and ROWNUM<15
")))
print(table2)
print(bs<-table2)
}
)
output$dis<-renderTable({
a1()
})
}
)