2010-08-26 83 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

相關問題