我有一个Marklogic 9项目,我正在使用Roxy进行配置。 我一直关注这些例子:https://github.com/marklogic-community/roxy/wiki/Adding-Custom-Build-Steps
基本上,我有一个服务器端的JS函数,我想在部署内容后调用它。我有这样的事情:
#然后你会定义你的新方法
def deploy_content
# you can optionally call the original
original_deploy_content
# do your stuff here
execute_query(%Q{
xquery version "1.0-ml";
xdmp:javascript-eval('var process = require("/ingestion/process.sjs"); process.postDeployContent();')
},
:db_name => @properties["ml.app-name"] + "-content")
end
这里调用的xquery在通过查询控制台执行时评估正常。但是当我调用ml本地部署内容时,我收到以下错误:
ERROR: 500 "Internal Server Error"
ERROR: <html xmlns="http://www.w3.org/1999/xhtml">
<head>
<title>500 Internal Server Error</title>
<meta name="robots" content="noindex,nofollow"/>
<link rel="stylesheet" href="/error.css"/>
</head>
<body>
<span class="error">
<h1>500 Internal Server Error</h1>
<dl>
<dt>XDMP-MODNOTFOUND: var process = require("/ingestion/process.sjs"); process.postDeployContent(); -- Module /ingestion/process.sjs not found</dt>
<dd></dd>
<dt>in [anonymous], at 1:14 [javascript]</dt>
<dd></dd>
<dt>at 3:6,
in xdmp:eval("var process = require(&quot;/ingestion/process.sjs&quot;); proce...") [javascript]</dt>
<dd></dd>
<dt>in /eval, at 3:6 [1.0-ml]</dt>
<dd></dd>
</dl>
</span>
</body>
</html>
为什么从app_specific.rb通过xquery运行时找不到模块?
或者......有更好的方法从这里调用JS模块函数。对不起,我对xquery方面不太熟悉,所以我只是调用了JS函数。
答案 0 :(得分:2)
您需要使用:app_name
而不是:db_name
,并传入具有正确文档数据库和模块数据库组合的应用服务器的名称。否则,代码将根据App-Services服务器进行评估,该服务器是开箱即用的,通常是空的Documents and Modules数据库。
如果您可以直接提供SJS代码会很好,而且只需要对Roxy进行有限的更改。为此票证添加权重以突出其优先级:
https://github.com/marklogic-community/roxy/issues/821
HTH!