【发布时间】:2019-11-13 16:26:48
【问题描述】:
我在 xquery 中的程序有一些变量,这些变量基于函数运行的环境。比如dev指向“devserver”,test指向“testserver”,prod指向“server”等
如何在 application.xml 文件中进行设置,如何在 .xqy 函数中引用这些内容?
“解决方法”解决方案 1
使用“switch”来确定主机:
switch (xdmp:host-name(xdmp:host()))
case <dev environment as string> return "devserver"
case <test environment as string> return "testserver"
.
.
.
default return fn:error(xs:QName("ERROR"), "Unknown host: " || xdmp:host-name(xdmp:host()))
“变通方法”解决方案2
在您的项目中为每个主机创建一个 xml 文件,更新您的 application.xml 以将 xml 文件放置在取决于环境名称的目录中,然后参考安装时构建的文档。
应用程序.xml:
<db dbName="!mydata-database"> <dir name="/config/" permissionsMode="set"> <uriPrivilege roles="*_uberuser"/> <permissions roles="*_uberuser" access="riu"/> <load env="DEV" root="/config/DEV/" merge="true" include="*.xml"/> <load env="TEST" root="/config/TEST/" merge="true" include="*.xml"/>位于项目目录/config//environment.xml 中的文档
<environment> <services> <damApi>https://stage.mydam.org</damApi> <dimeApi>https://stage.mydime.org/api/Services</dimeApi> </services> </environment>当我需要获取值时使用
fn:doc("/config/environment.xml")/environment/services/damApi/fn:string()在我看来,这两种解决方案都不是最好的。
【问题讨论】:
-
我会尽量避免使其特定于主机。 MarkLogic 是一个集群解决方案,因此您在横向扩展或将集群迁移到不同的硬件或 vm ware 时会遇到麻烦。