2015-10-20 77 views
0

我正在尋找使用rest-api自動執行ML7中的備份。 由於這不是開箱即用的,我想我可以在所需的時間表上添加新的擴展名和設置腳本,並使用curl命令。 聽起來很簡單,但由於某種原因,當我嘗試安裝我的擴展它吐出來「無效內容」和日誌中顯示:MarkLogic 7 - 使用rest-api進行數據庫備份

RESTAPI-INVALIDCONTENT: (err:FOER0000) Invalid content: invalid backupdb extension: could not parse XQuery extension backupdb; please see the server error log for detail XDMP-UNEXPECTED: (err:XPST0003) Unexpected token syntax error, unexpected QName_; backupdb either is not a valid module or does not provide extension functions (delete, get, put, post) in the http://marklogic.com/rest-api/resource/backupdb namespace

下面是我的分機代碼:

xquery version "1.0-ml"; 

module namespace backupdb = 
    "http://marklogic.com/rest-api/resource/backupdb"; 

import module namespace admin = "http://marklogic.com/xdmp/admin" 
    at "/MarkLogic/admin.xqy"; 


declare variable $dbname := "database-backup"; 
declare variable $s3bucket := "bucket-destination"; 

declare function backupdb:put(
    $context as map:map, 
    $params as map:map, 
    $input as document-node()* 
) as document-node()? 
{ 
    let $dbname := map:get($params, $dbname) 
    let $s3bucket := map:get($params, $s3bucket) 
    xdmp:database-backup(
    (:xdmp:database-forests(xdmp:database($dbname)), $s3bucket):) 
    xdmp:database-forests(xdmp:database($dbname)), "s3://bucketname/folder") 
     (: "s3://s3bucket/folder"); :) 

}; 

基礎的從我的另一個問題的答案,我得到了stackoverflow我想我可以使用參數,並捲曲到類似的東西(成功安裝後):

curl --anyauth --user "${USER}":"${pass}" -X PUT -d 'undefined' 'http://localhost:8040/v1/resources/backupdb?rs:database-backup=Documents&rs:bucket-destination=s3://bucket/folder' 

POST方法返回相同的錯誤。 我在這裏做錯了什麼?

歡迎任何建議。

謝謝 歐內斯特

回答

1

另外,您的函數中有語法錯誤(在FLWOR中缺少返回值),並且不需要導入管理庫。

+0

謝謝, 我更新了我的代碼: 'return document {「Done」}' 但仍然是同樣的問題。具體地說: – kabucek

+0

:'return xdmp:database-backup(...)'。每個[FLWOR語句需要返回](http://docs.marklogic.com/guide/xquery/langoverview#id_11626) –

+0

新擴展的安裝工作正常,但現在當我調用curl實際開始備份時
'curl --anyauth --user user:pass -X PUT -d'undefined''http:// localhost:8040/v1/resources/backupdb?rs:database-backup = Documents&rs:bucket-destination = s3:// bucketname /文件夾''
它返回'錯誤500:原因:無效強制,但它確實啓動,文件被保存到s3,我在日誌中獲得一堆消息:
'XDMP-AS:(err:XPTY0004)$ service ($ context,$ service-params,$ input) - 強制轉換無效:xs:unsignedLong(「」)as document-node()' '無效強制'是什麼意思? – kabucek

0

上面的curl命令調用資源服務擴展。在成功安裝之前,您無法調用擴展。

此外,

  • 捲曲需要PUT或POST請求安裝時與-H 'content-type: _CONTENT_TYPE_HERE_';指定有效載荷的內容類型,所述內容類型應用/ XQuery的
  • 安裝時將本地路徑傳遞到XQuery源文件與-d @/path/to/xquerysource.xqy

這裏的文件上安裝一個資源服務擴展,其中包括捲曲例如:

http://docs.marklogic.com/7.0/REST/PUT/v1/config/resources/%5Bname%5D

下面是關於調用資源服務擴展文件:

http://docs.marklogic.com/7.0/REST/PUT/v1/resources/%5Bname%5D

希望有幫助,

+0

對不起,上面的curl命令只是安裝成功後的一個想法。 上面的錯誤我從這個命令得到: curl --anyauth --user user:pass -X PUT -i -H「Content-type:application/xquery」-d @「./ backupdb.xqy」' http:// localhost:8040/v1/config/resources/backupdb' – kabucek

+0

在MarkLogic討論列表中,Danny Sokolsky評論了上述示例中的語法錯誤。也許最好在一個場所而不是兩個場所提出這個問題,以避免混淆? – ehennum

+0

會做。非常感謝你的支持。 – kabucek