Marklogic Roxy:从 app_specific.rb 调用 javascript 模块

Marklogic Roxy: Calling a javascript module from app_specific.rb

我有一个正在使用 Roxy 配置的 Marklogic 9 项目。 我一直在关注这些示例: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(&amp;quot;/ingestion/process.sjs&amp;quot;); proce...") [javascript]</dt>
        <dd></dd>
        <dt>in /eval, at 3:6 [1.0-ml]</dt>
        <dd></dd>
      </dl>
    </span>
  </body>
</html>

为什么在 运行 通过 xquery 来自 app_specific.rb 时找不到模块?

或者...是否有更好的方法从这里调用 JS 模块函数。不好意思,我对xquery这边不太熟悉,所以直接调用了一个JS函数。

您需要使用 :app_name 而不是 :db_name,并传入具有正确的文档数据库和模块数据库组合的应用程序服务器的名称。否则,将针对开箱即用的 App-Services 服务器评估代码,通常是空文档和模块数据库。

如果您能直接提供 SJS 代码就好了,而且只需要对 Roxy 进行有限的更改。增加这张票的权重以提高其优先级:

https://github.com/marklogic-community/roxy/issues/821

HTH!