0

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

    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)时,它说:

    Loading required package: DBI
    Loading required package: rJava
    Warning message:
    replacing previous import 'show' when loading 'rJava'

然后我所有的 RJDBC 代码都可以正常工作。那么这是某些 Java 配置的问题,还是 rApache 由于警告消息而无法运行库的问题?

4

2 回答 2

1

是的,它与 libjvm.so 相关;) rjava.so 找不到它!

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

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

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

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

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

干杯!

杰夫

于 2012-06-16T18:44:23.300 回答
0

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

你可以用一个简单的测试脚本来检查:

setContentType('text/text')
cat(Sys.getenv()['LD_LIBRARY_PATH'], '\n')
DONE

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

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

添加一个文件来/etc/ld.so.conf.d调用rApache_rJava.conf,内容如下:

/usr/lib/jvm/java-1.6.0-openjdk-1.6.0.0.x86_64/jre/lib/amd64/server/

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

作为根:

$ /sbin/ldconfig

然后重新启动Apache

在 Apache 重新启动后,您应该能够通过 rApache 运行依赖于 的 R 脚本rJava,例如:

library(rJava)

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

编辑:全面披露

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

于 2012-11-20T19:48:45.293 回答