这个问题令人生气,我希望有人能指出我正确的方向。在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正在被击中,然后正在落入默认处理程序。这看起来与处理程序没有运行一致,但我不确定为什么我看到此部署的一个版本中的行为,而不是另一个版本。
参见http://kenai.com/jira/browse/JRUBY_RACK-35 – 2010-10-21 14:41:35