2010-08-26 70 views
0

这个问题令人生气,我希望有人能指出我正确的方向。在Jetty下部署JRuby应用程序时出现的奇怪问题

我想部署一个Redmine的实例到Jetty servlet。我用Warbler创造了这场战争,创造了上下文,并且似乎部署了它。不幸的是,我看到以下行为:

如果我以其配置的主机名的/访问我的应用程序,我会看到webapp目录的目录列表。

如果我通过发送GET请求到/ braillewizard(上下文名称)并使用发送的配置主机名访问应用程序,则应用程序将运行。

如果我发送到/ braillewizard请求与主持人:不包括在主机名的列表头,应用程序不能运行,我得到一个404

所以它似乎像我有虚拟主机部分配置正确,但有些不太正确。特别烦人的是,我在其他两个系统上运行类似的设置,包括运行Redmine的系统,并且一切正常。

我能想到的这个系统的唯一区别是我为系统的FQDN设置了一个虚拟主机,而在其他系统上这些主机位于偶然的域上。不知道这是否是一个因素,但是我试图摆脱上下文配置并使用/ root中的应用程序似乎仍然需要GET/root。

我也直接telnet到Jetty服务器,所以这对我的前端Web服务器不是问题。

这里是我的情况下配置:

<Configure class="org.mortbay.jetty.webapp.WebAppContext"> 
    <Set name="war"><SystemProperty name="jetty.home"/>/webapps/braillewizard.war</Set> 
    <Set name="contextPath">/</Set> 
    <Set name="virtualHosts"> 
    <Array type="java.lang.String"> 
     <Item>braillewizard.org</Item> 
     <Item>www.braillewizard.org</Item> 
    </Array> 
    </Set> 
</Configure> 

我的web.xml中,通过莺产生:

<!DOCTYPE web-app PUBLIC 
    "-//Sun Microsystems, Inc.//DTD Web Application 2.3//EN" 
    "http://java.sun.com/dtd/web-app_2_3.dtd"> 
<web-app> 

    <context-param> 
    <param-name>rails.env</param-name> 
    <param-value>production</param-value> 
    </context-param> 

    <context-param> 
    <param-name>public.root</param-name> 
    <param-value>/</param-value> 
    </context-param> 


    <filter> 
    <filter-name>RackFilter</filter-name> 
    <filter-class>org.jruby.rack.RackFilter</filter-class> 
    </filter> 
    <filter-mapping> 
    <filter-name>RackFilter</filter-name> 
    <url-pattern>/*</url-pattern> 
    </filter-mapping> 

    <listener> 
    <listener-class>org.jruby.rack.rails.RailsServletContextListener</listener-class> 
    </listener> 


</web-app> 

如果有什么事我可以提供,那么请让我知道。我一直在Google上寻找一个解决方案几个小时,没有找到任何东西。

编辑:好的,这里有一些细节。/context的工作原理并不完全正确。相反,该应用程序无法加载,出于某种原因,我看不到该例外情况。稍后进行各种调整,问题似乎稍有不同。

看来,/没有运行任何路线连接到/在Rails应用程序。而是触发webapp文件夹的目录列表。如果我直接在我的应用程序中访问一个URL,除了/当然,一切似乎都很好。

将-DDEBUG作为JVM参数调用Jetty似乎表明RackHandler正在被击中,然后正在落入默认处理程序。这看起来与处理程序没有运行一致,但我不确定为什么我看到此部署的一个版本中的行为,而不是另一个版本。

回答

0

有人向我建议,这种行为是由于JRuby Rack适配器1.0.2中引入的错误引起的,修复程序涉及降级到1.0.1。虽然我还没有测试这个解决方案,但它与为什么一台服务器上的版本可能工作而另一台服务器上的版本失败时是一致的。

我会试着用这个结果稍后再更新这个问题,但是现在这个问题已经大大地削弱了我一会儿混淆这个东西的意愿。:)目前它的工作原理是因为我有一个URL重写,对我来说这已经足够了。

0

我也有这个问题部署Rails应用程序与Jetty使用鸣鸟。为我工作的修复是设置dirAllowed参数的默认servlet来false,即

<init-param> 
    <param-name>dirAllowed</param-name> 
    <param-value>false</param-value> 
</init-param> 

我觉得默认的行为是砸锅从“无法找到欢迎文件”到“显示目录列表' - 更改此参数会导致将请求分派到您的Rails应用程序。

+0

参见http://kenai.com/jira/browse/JRUBY_RACK-35 – 2010-10-21 14:41:35

相关问题