【问题标题】:Connecting to an Oracle database with ROracle on shiny-server在闪亮服务器上使用 ROracle 连接到 Oracle 数据库
【发布时间】:2014-03-02 08:54:03
【问题描述】:

我们最近获得了一个小型 redhat 服务器来试验 shiny-server。我们的 IT 部门运行了闪亮服务器并安装了 Oracle 客户端,但我无法让 ROracle 在闪亮服务器中工作。他们(IT)已经确定这是一个应用程序问题并开始放弃......

最初,ROracle 根本无法在服务器上运行,但我们通过在我的 .bashrc 文件中设置 LD_LIBRARY_PATH 来从我的用户帐户中运行它。完成后,我可以登录服务器,并从 R 查询数据库。我什至可以使用 runApp() 从 R 运行我闪亮的应用程序。

当我尝试通过 shiny-server 访问同一个应用程序时,我收到以下错误:

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 访问权限,所以我可以尝试的事情是有限的。在使用 Sys.setenv() 和使用 system() 加载 ROracle 之前,我尝试从我的 server.R 脚本设置 LD_LIBRARY_PATH ,但这些都不起作用。我们一直试图帮助我的 DBA 尝试在 /etc/init/shiny-server.conf 中设置 LD_LIBRARY_PATH 但这似乎也不起作用。

我真的希望这里有人有一些想法。

谢谢

【问题讨论】:

  • 你在 shiny-server conf 中使用了哪种语法?导出 LD_LIBRARY_PATH=?或者只是 LD_LIBRARY_PATH= ?

标签: shiny-server


【解决方案1】:

经过几天的沮丧后,我找到了解决方案。您需要在位于 /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 脚本的开头似乎已经解决了这个问题。

【讨论】:

    【解决方案2】:

    这是我的博客文章(大约一年前),其中详细描述了如何让 R Studio Server 与 Oracle 一起使用。 LD_LIBRARY_PATH,OCI Lib 和所有的东西都提供了。也许这对其他人有帮助:http://learnfrominfo.tumblr.com/post/38382388429/connect-r-studio-server-to-an-oracle-database-with

    【讨论】:

    • 此方法适用于使用 vRODBC 连接到 Vertica 数据库。我在目录/etc/profile.d/ 中添加了一个文件shinyserver.sh,其内容为export LD_LIBRARY_PATH=/usr/lib。按照其他答案中的建议将其添加到 /etc/init/shiny-server.conf 文件中不起作用。
    【解决方案3】:

    我在使用 PHP 和 Apache 时遇到了同样的问题。

    请参考 PHP 文档中的Setting the Oracle Environment

    另外,请参阅评论 - 您在 /etc/init/shiny-server.conf 中使用了哪种语法?

    【讨论】:

    • 谢谢!我将查看 PHP 文档。为了回答您的其他问题,她似乎将 export LD_LIBRARY_PATH=/usr/lib/oracle/11.2/client64/lib:$LD_LIBRARY_PATH 添加到了 shiny-server.conf。
    【解决方案4】:
    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()
    
        })
    
     }
    )
    

    【讨论】:

    • 你能补充一些关于这是如何解决问题的解释吗?
    猜你喜欢
    • 2016-05-19
    • 2022-06-10
    • 1970-01-01
    • 2018-07-05
    • 2015-11-01
    • 1970-01-01
    • 1970-01-01
    • 2019-05-24
    • 1970-01-01
    相关资源
    最近更新 更多