我正在努力在Moqui建立一个公共网站,我正在尝试将(dev-)www.example.net作为公共营销网站和注册表单。然后是[tennant-name] .example.net上的租户我已经设置了basic component然后编辑了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/
时,我得到的错误是500org.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的直接副本?
感谢您的帮助! 萨姆
答案 0 :(得分:0)
您可能使用相同的端口号。尝试使用不同的(例如8081)作为第二个。所有使用的端口应该是不同的。请看我的评论。
答案 1 :(得分:0)
我猜你的特定配置无效的原因是root-screen。@ host属性始终是正则表达式,而你使用的URL包含特殊字符,包括&#39; - &#39;和&#39;。&#39;。如果你用“&#39;”来逃避这些字符,它应该有用,即使用&#39;。&#39;和&#39; - &#39;。
也就是说,如果您想为多个租户支持具有相同webapp根的虚拟主机,您不需要以这种方式声明虚拟主机,只有在需要不同的webapp根屏幕时才需要这样做(可能是你最终想做的事情。)
更新:使用上面的配置代码段,问题是有多个webapp-list.webapp元素,一个名称= webroot,这是使用的webapp(在moqui-name上下文中的web.xml文件中指定) param)和另一个name = webpublic被忽略,因为根据web.xml文件中的名称找到了配置。
解决方案是将两个根屏幕元素放在名为webroot的webapp元素下。基本上查找它们的方式并不是随意的,它是明确的webapp名称(moqui-name context-param)。如果您部署了多个Web应用程序,则它们应具有不同的moqui-name值以引用不同的配置。这最好是在Winstone之类的东西上完成,比如Tomcat。它也会偏离部署Moqui的记录方式,因此需要做更多的工作。这样做没有任何意义,最好根据需要在具有多个根屏元素和多个根屏幕的同一个webapp中运行所有内容。