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で何かですか?

問題は、このライブラリ(RJDBC)をRだけで実行すると、次のように表示されます:

    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を起動するため、プロセスが共有ライブラリを見つけることができる場所が制限されます。シェルスクリプトを調べて、これが発生しているかどうかを確認することをお勧めします。

また、動的リンカーのランタイムバインディング構成、たとえば/etc/ld.so.*ファイルとldconfigコマンドについても調査します。

個人のRセッションからコードを実行してみてください。そこで実行されない場合は、最初にjava/rJavaインストールを修正する必要があります。そこで実行される場合は、上記で説明したトピックを調べてください。

ああ、私はちょうど思い出しました:rJavaは、rJavaパッケージのインストールにあるいくつかのJava固有の環境変数をソースする可能性があります。それがローカルセッションで発生しているかどうかを確認してください。その場合は、apache/rApacheを実行するときにこれらのセットが必要になる可能性があります。

また、前述したように、ディストリビューションがapacheの環境を制限している場合は、それらのJava環境変数をその制限プロセスに組み込む必要があります。

乾杯!

ジェフ

于 2012-06-16T18:44:23.300 に答える