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(&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>
Почему модуль не найден при запуске через xquery из app_specific.rb?
Или... есть ли лучший способ вызвать функцию модуля JS отсюда. Извините, я не слишком знаком со стороной xquery, поэтому вместо этого я просто вызвал функцию JS.
1 ответ
Вам нужно использовать :app_name
скорее, чем :db_name
и передайте имя сервера приложений, который имеет правильную комбинацию базы данных документов и базы данных модулей. В противном случае код сравнивается с сервером App-Services, который запускается сразу после установки и, как правило, очищает базы данных документов и модулей.
Было бы хорошо, если бы вы могли предоставить код SJS напрямую, и это потребовало бы только ограниченных изменений в Roxy. Добавьте вес к этому тикету, чтобы выдвинуть его приоритет:
https://github.com/marklogic-community/roxy/issues/821
НТН!