1

タイトルは私の問題を要約していると思います。他に何を試すことができるかについて、誰かが持っているかもしれない指針をいただければ幸いです。以下に太字でコメントを付けてコンソール出力を貼り付けました。インストールされている MonetDB.R のバージョンは、R-forge (0.8.5) の最新バージョンです。

fabians@wap27:~$ R

[...]

> library(MonetDB.R)   
Loading required package: DBI
Loading required package: digest

Attaching package: ‘MonetDB.R’

The following objects are masked from ‘package:stats’:

    sd, var

The following objects are masked from ‘package:base’:

    sample, tabulate

> sessionInfo()
R version 3.0.2 (2013-09-25)
Platform: x86_64-pc-linux-gnu (64-bit)

locale:
 [1] LC_CTYPE=en_US.UTF-8       LC_NUMERIC=C              
 [3] LC_TIME=en_US.UTF-8        LC_COLLATE=en_US.UTF-8    
 [5] LC_MONETARY=en_US.UTF-8    LC_MESSAGES=en_US.UTF-8   
 [7] LC_PAPER=en_US.UTF-8       LC_NAME=C                 
 [9] LC_ADDRESS=C               LC_TELEPHONE=C            
[11] LC_MEASUREMENT=en_US.UTF-8 LC_IDENTIFICATION=C       

attached base packages:
[1] stats     graphics  grDevices utils     datasets  methods   base     

other attached packages:
[1] MonetDB.R_0.8.5 digest_0.6.3    DBI_0.2-7      
> 
> # as @ https://github.com/ajdamico/usgsd/tree/master/MonetDB:
> batfile <- monetdb.server.setup(
+         database.directory = "~/monetdb",
+         monetdb.program.path = "/usr",
+         dbname = "test",
+         dbport = 50000L)
/home/fabians/monetdb did not exist.  now it does

効いたようです…

>
> batfile <- "/home/fabians/monetdb/test.sh"

> system(paste("cat ", batfile))
#!/bin/sh
/usr/bin/mserver5 --set prefix=/usr --set exec_prefix=/usr --dbpath /home/fabians/monetdb/test --set mapi_port=50000 --daemon yes > /dev/null &
echo $! > /home/fabians/monetdb/mserver5.started.from.R.pid

そのシェルスクリプトが想定どおりに見えるかどうか誰か教えてもらえますか?

> system(paste("ls ~/monetdb"))
test  test.sh

OK、(空の) 'test' ディレクトリが .sh と共に作成されました

> monetpid <- monetdb.server.start(batfile)
Read 1 item
> system(paste("ls ~/monetdb/test"))
00e3bc31-ca59-43e6-ace8-a96aac37bddd  bat  box

monetdb サーバーを起動した後、test ディレクトリにはデータベース情報が含まれていると思います。

> dbname <- "test"
> dbport <- 50000L
> monet.url <- paste0("monetdb://localhost/", dbname)
> db <- dbConnect( MonetDB.R(), monet.url, 
+                  port=as.integer(dbport), timeout=as.integer(86400))
Error in .monetAuthenticate(socket, dbname, user, password) : 
  Authentication error: !monetdbd: no such database 'test', please create it first

テストディレクトリが見つからない理由は何ですか?

monetdb.server.startのヘルプとのように、わずかに異なるコマンドhttps://github.com/ajdamico/usgsd/tree/master/MonetDB:

> monet.url <- paste0("monetdb://localhost:", dbport, "/", dbname)
> db <- dbConnect( MonetDB.R(), monet.url, wait = TRUE )
R: mapi.c:72: mapiConnect: Assertion `Rf_isInteger(port)' failed.
Aborted

このバグは修正されているはずです。こちらを参照してください...

4

1 に答える 1

2

エラーの理由は、ポート 50000 でまだ monetdbd を実行しているためです。これが、monetdb.server.start によって生成された mserver5 プロセスがそれにバインドできない理由です。そのため、monetdb.server.setup で別のポート (たとえば 50001) を選択するか、monetdb.server.start を呼び出す前に monetdbd を強制終了してください。おそらく、monetdb.server.setup にチェックを追加して、指定されたポートでリッスンしているプロセスがないことを確認できます...

于 2014-01-28T14:04:21.557 に答える