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