2013-04-30 54 views
1

我一直在使用Lift作为个人网站的框架,为了将服务器从我的电脑移开,我转向了Cloudbees。我将我的应用程序作为.war文件部署到云中,并开始浏览。cloudbees + lift application =破坏导航

编辑 - 显然这与Cloudbees无关。这是一个Tomcat问题。

在当地,我的应用程序将成为localhost:8008/demosdemos.html页面。但在Cloudbees上,[URL]/demos自动重定向到[URL]/demos/,并给出了404。如果我直接访问[URL]/demos.html,它似乎工作正常。

我想避免在我的网页上显式的“.html”后缀。我怎样才能使这个工作,以便当我在本地运行时,事情的行为?

回答

1

好吧,我有这个想通了,所以我要发布我自己的答案其他民族的未来参考。

的问题

CloudBees的使用Tomcat(不是码头,这是什么得到通过container:start与SBT Web插件使用)。正如Where does Tomcat append/to directory paths?所示,Tomcat会将/附加到它认为是目录的路径。

随着应用程序的结构就像

src/main/webapp 
- demos.html 
- demos 
    - some-demo.html 

和提升网站地图的定义,其中包括

Menu.i("Demos")/"demos" submenus (
    Menu.i("Some Demo")/"demos"/"some-demo" 
) 

Tomcat的是看到的URL“/演示”,看到我的“演示”文件夹中,并假设我的网址是一个错误,添加了最后的斜线。

解决方案

解决该问题的工作有位变换的。首先,将demos.html移入演示文件夹并将其重命名为index.html

src/main/webapp 
- demos 
    - index.html (formerly demos.html) 
    - some-demo.html 

调整站点地图,以反映这种变化

Menu.i("Demos")/"demos"/"index" submenus (...) 
          ^added an extra path step 

现在我的自动生成的地图将直接指向/demos/和Tomcat愉快地提供我的演示/ index.html文件在那个地方。

+0

出于好奇,你如何在'web.xml'中映射你的Lift servlet?我们在几个应用程序中使用了带有Lift的Tomcat,并且在一段时间内没有遇到这个问题。如果我回想起被引用的线程,它与它的安装方式有关。 – jcern 2013-04-30 14:22:30

+0

@jcern我现在在工作,所以我不能完全告诉你,但是如果我记得正确的话,那就是当我开始项目时,任何默认的web.xml都带有lift demo。有一个LiftFilter和一个将其应用于'/ *'的过滤器映射 – Dylan 2013-04-30 14:52:54

0

你可以尝试在本地运行战争(在tomcat中),看看是否会发生?这似乎并不要在CloudBees的具体到tomcat什么

+0

我不是很熟悉的Tomcat(只SBT和'容器:start'我的猜测是码头的事情)...包涵我,而我试图使这项工作。 – Dylan 2013-04-30 01:14:10

+0

好吧,看起来我在将战争部署到本地tomcat服务器时遇到同样的问题。 – Dylan 2013-04-30 01:23:18

+0

是的,这很奇怪,很多都使用tomcat。如果您可以使用嵌入式码头(即jar或zip)创建应用程序,则可以在CloudBees上运行该应用程序(如果有帮助的话)。 – 2013-04-30 04:51:13