首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >RJDBC未在Rapache中作为库加载

RJDBC未在Rapache中作为库加载
EN

Stack Overflow用户
提问于 2012-06-16 02:21:45
回答 2查看 429关注 0票数 0

因此,我需要在Rapache程序中访问MSSQL服务器,当我试图在Rapache代码中加载RJDBC作为库时,我得到了服务器错误。在日志中,它看起来像这样:

代码语言:javascript
复制
    referer: http://10.21.8.145/
    Error : .onLoad failed in loadNamespace() for 'rJava', details:
      call: dyn.load(file, DLLpath = DLLpath, ...)
      error: unable to load shared object '/usr/lib/R/site-library/rJava/libs/rJava.so':
      libjvm.so: cannot open shared object file: No such file or directory
    Error: package/namespace load failed for 'rJava'
 Traceback:
    5: stop(gettextf("package/namespace load failed for %s", sQuote(package)), 
   call. = FALSE, domain = NA)
    4: library(rJava)
    3: eval.with.vis(expr, envir, enclos)
    2: eval.with.vis(ei, envir)
    1: source("/var/www/brew/optimization.R")
    [Fri Jun 15 13:57:29 2012] [error] [client 10.21.2.79] File does not exist:  /var/www/favicon.ico

此外,我还检查了该目录中是否存在rJava.so。是不是和libjvm.so有关?

问题是,当我在R中运行这个库(RJDBC)时,它会这样说:

代码语言:javascript
复制
    Loading required package: DBI
    Loading required package: rJava
    Warning message:
    replacing previous import 'show' when loading 'rJava'

然后我所有的RJDBC代码都能正常工作。那么,这是某些Java配置的问题,还是因为警告消息导致rApache无法运行库的问题?

EN

回答 2

Stack Overflow用户

发布于 2012-06-17 02:44:23

是的,这是libjvm.so ;) rjava.so找不到它!

各种linux发行版(我假设您运行的是linux?)将在受限环境中启动apache,从而限制进程可以找到共享库的位置。我建议查看shell脚本,看看是否发生了这种情况。

我还将研究您的动态链接器运行时绑定配置,例如,/etc/ld.so.*文件和ldconfig命令。

尝试从您的个人R会话运行您的代码。如果它不能在那里运行,那么您需要首先修复您的java/rJava安装。如果它确实在那里运行,那么探索我上面讨论的主题。

哦,我刚刚想起来了:位于rJava包安装中的rJava可能会包含一些特定于java的环境变量。看看您的本地会话中是否发生了这种情况。如果是这种情况,那么在运行apache/rApache时,您很可能需要这些设置。

如上所述,如果您的发行版限制了apache的环境,那么您必须将这些Java环境变量填充到该限制过程中。

干杯!

杰夫

票数 1
EN

Stack Overflow用户

发布于 2012-11-21 03:48:45

我也遇到了同样的问题,并确定了原因是rApache没有设置LD_LIBRARY_PATH环境变量。这需要在为rJava (或任何依赖于它的包)创建R环境以正确初始化(即能够找到libjvm.so的路径)之前进行设置。

您可以使用一个简单的测试脚本来检查这一点:

代码语言:javascript
复制
setContentType('text/text')
cat(Sys.getenv()['LD_LIBRARY_PATH'], '\n')
DONE

不幸的是,使用Apache的SetEnv指令的简单修复不起作用。相反,您需要执行以下操作:

(注意,以下操作是在64位RHEL5服务器上完成的)

将名为rApache_rJava.conf的文件添加到包含以下内容的/etc/ld.so.conf.d中:

代码语言:javascript
复制
/usr/lib/jvm/java-1.6.0-openjdk-1.6.0.0.x86_64/jre/lib/amd64/server/

(上面一行是我的服务器上libjvm.so的父目录的路径)

以root用户身份:

代码语言:javascript
复制
$ /sbin/ldconfig

然后重新启动Apache

在Apache重新启动后,您应该能够通过依赖于rJava的rApache运行R脚本,例如,包含以下行的任何内容:

代码语言:javascript
复制
library(rJava)

上面的过程以及其他参考链接也在我的博客上概述了:http://oddhypothesis.blogspot.com/2012/06/making-rapache-load-rjava.html

编辑:完全公开

上面链接的博客是我自己的

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/11056180

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档