0

我正在努力在 Moqui 建立一个公共网站,我试图将 (dev-)www.example.net 作为公共营销网站和注册表单。然后是 [tennant-name].example.net 上的租户,我已经设置了一个基本组件,然后编辑了 MoquiDevConf.xml,修改了 webapp-list 如下所示:

<webapp-list>
    <webapp name="webpublic" http-port="8080" https-enabled="false">
        <root-screen host="dev-www.example.net" location="component://webpublic/screen/webpublic.xml"/>
    </webapp>
    <webapp name="webroot" http-port="8080" https-enabled="false">
        <root-screen host="^((?!dev-www.example.net).)*$" location="component://webroot/screen/webroot.xml"/>
    </webapp>
</webapp-list>

我已重新启动应用程序以使更改生效,但当我尝试访问http://dev-www.example.net:8080/时得到的只是错误 500

org.moqui.BaseException: Could not find root screen for host [dev-www.example.net]

据我所知,Moqui 正在找到我在日志中看到的组件:

Added component [webpublic] at [file:/Volumes/MacHDD/Sources/atlas-moqui/runtime/component/webpublic] 

非 dev-www 主机仍然可以工作,我得到了惯用的登录屏幕,所以我不确定我缺少什么,因为这几乎是现有 webroot 的直接副本?

谢谢你的帮助!山姆

4

2 回答 2

0

我对您的特定配置为何不起作用的猜测是 root-screen.@host 属性始终是正则表达式,并且您使用的 URL 包含特殊字符,包括“-”和“.”。如果您使用 '\' 转义这些字符,它应该可以工作,即使用 '.' 和 '-'。

也就是说,如果您想为多个租户支持具有相同 webapp 根的虚拟主机,则不需要以这种方式声明虚拟主机,只有在您想要不同的 webapp 根屏幕时才需要这样做(这可能是您最终的想要做)。

更新:对于上面的配置片段,问题是有多个 webapp-list.webapp 元素,一个带有 name=webroot 的 webapp 是使用的 webapp(如 moqui-name context-param 中的 web.xml 文件中指定的那样)和另一个 name=webpublic 被忽略,因为配置是根据 web.xml 文件中的名称找到的。

解决方案是将两个 root-screen 元素放在 name=webroot 的 webapp 元素下。基本上,这些查找的方式不是任意的,它对于 webapp 名称(moqui-name context-param)是明确的。如果您部署了多个 webapp,它们应该具有不同的 moqui-name 值来引用不同的配置。这最好在 Winstone 之外的其他东西中完成,比如 Tomcat。它也会偏离记录在案的 Moqui 部署方式,因此需要做更多的工作。这样做没有任何意义,最好根据需要在具有多个根屏幕元素和多个根屏幕的同一个 web 应用程序中运行所有内容。

于 2015-02-04T02:56:18.430 回答
0

您可能使用相同的端口号。为第二个尝试不同的一个(例如 8081)。所有使用的端口都应该不同。请同时查看我的评论。

于 2015-02-03T07:56:52.767 回答