2015-10-20 45 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