Marklogic Roxy: вызов модуля javascript из app_specific.rb

У меня есть проект 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 local deploy content, я получаю следующую ошибку:

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.

1 ответ

Решение

Вам нужно использовать :app_name скорее, чем :db_nameи передайте имя сервера приложений, который имеет правильную комбинацию базы данных документов и базы данных модулей. В противном случае код сравнивается с сервером App-Services, который запускается сразу после установки и, как правило, очищает базы данных документов и модулей.

Было бы хорошо, если бы вы могли предоставить код SJS напрямую, и это потребовало бы только ограниченных изменений в Roxy. Добавьте вес к этому тикету, чтобы выдвинуть его приоритет:

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

НТН!

Другие вопросы по тегам