這個問題令人生氣,我希望有人能指出我正確的方向。在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