所以我需要在我的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 由于警告消息而无法运行库的问题?
是的,这是 libjvm.so ;)rjava.so 找不到!
各种Linux发行版(我猜你正在运行linux?)将在受限的环境中启动apache,从而限制进程可以找到共享库的位置。我建议查看 shell 脚本以查看是否发生这种情况。
我还会调查您的动态链接器运行时绑定配置,例如/etc/ld.so.* 文件以及 ldconfig 命令。
尝试从个人 R 会话运行代码。如果它没有在那里运行,那么你需要先修复你的java/rJava安装。如果它确实在那里运行,那么探索我上面讨论的主题。
哦,我刚刚想起:rJava 可能会在某些特定于 Java 的环境变量中获取源代码,这些变量位于 rJava 包安装中。看看这是否发生在您的本地会话中。如果是这种情况,那么在运行 apache/rApache 时,您很可能需要这些设置。
正如我上面提到的,如果你的发行版正在限制 apache 的环境,那么你就必须将这些 Java 环境变量填充到该限制过程中。
干杯!
杰夫
我遇到了同样的问题,并确定原因是 rApache 没有设置LD_LIBRARY_PATH
环境变量。 这需要在创建 R 环境之前进行设置,以便rJava
(或依赖于它的任何包)正确初始化(即能够找到libjvm.so
的路径)。
您可以使用简单的测试脚本进行检查:
setContentType('text/text')
cat(Sys.getenv()['LD_LIBRARY_PATH'], 'n')
DONE
不幸的是,使用 Apache 的 SetEnv
指令的简单修复不起作用。 相反,您需要执行以下操作:
(请注意,以下内容是在 64 位 RHEL5 服务器上完成的)
将文件添加到名为rApache_rJava.conf
/etc/ld.so.conf.d
,其中包含以下内容:
/usr/lib/jvm/java-1.6.0-openjdk-1.6.0.0.x86_64/jre/lib/amd64/server/
(上行是我的服务器上libjvm.so
父目录的路径)
作为根:
$ /sbin/ldconfig
然后重新启动 Apache
在 Apache 重新启动后,您应该能够通过依赖于 rJava
的 rApache 运行 R 脚本,例如任何带有以下行的内容:
library(rJava)
上述过程以及其他参考链接也在我的博客上概述:http://oddhypothesis.blogspot.com/2012/06/making-rapache-load-rjava.html
编辑:完全披露
上面链接的博客是我自己的