2012-11-20 74 views
4

我在Ruby世界的新手,做一些研究,我可以生成一個演示後Rails應用程序和測試WEBrick服務器部署JRuby項目到tomcat在windows平臺

上,但我遇到問題時,我開始用tomcat部署 我用warbler生成war文件,成功部署沒有錯誤 在Tomcat 7.0上的webapps文件夾下複製戰爭 啓動服務器並嘗試在瀏覽器上運行 我發現資產文件不可訪問&控制器方法無法重定向到正確的視圖,但顯示「我們很抱歉,但出錯了。」消息

部署我的配置嘗試

 
JRuby 1.7.0 
Gems  
    jruby-rack 1.1.10, 1.0.10 
    rails 3.2.9, 3.2.0 
    warbler 1.3.6, 1.3.2 
Tomcat 7.0.32 

這裏是從Tomcat

 
127.0.0.1 - - [20/Nov/2012:13:56:38 +0800] "GET /demo/ HTTP/1.1" 200 5906 
127.0.0.1 - - [20/Nov/2012:13:56:49 +0800] "GET /demo/assets/rails.png HTTP/1.1" 404 728 
127.0.0.1 - - [20/Nov/2012:14:01:21 +0800] "GET /demo/order/add HTTP/1.1" 500 643 

這裏的訪問日誌是日誌的形式tomcat的

 
    2012/11/20 13:56:18 org.apache.catalina.core.ApplicationContext log 

    INFO: jruby 1.7.0 (1.9.3p203) 2012-10-22 ff1ebbe on Java HotSpot(TM) Client VM 1.6.0_34-b04 [Windows XP-x86] 

    2012/11/20 13:56:18 org.apache.catalina.core.ApplicationContext log 

    INFO: using : runtime pool with acquire timeout of 10.0 seconds 

    2012/11/20 13:56:19 org.apache.catalina.core.ApplicationContext log 

    ContextListener: contextInitialized() 

    2012/11/20 13:56:19 org.apache.catalina.core.ApplicationContext log 

    SessionListener: contextInitialized() 

    2012/11/20 13:56:19 org.apache.catalina.core.ApplicationContext log 

    ContextListener: attributeAdded('org.apache.jasper.compiler.TldLocationsCache', '[email protected]') 

    2012/11/20 01:56:38 org.apache.catalina.core.ApplicationContext log 

    INFO: pool was empty - getting new application instance 

    2012/11/20 01:56:47 org.apache.catalina.core.ApplicationContext log 

    Started GET "/demo/assets/rails.png" for 127.0.0.1 at 2012-11-20 13:56:47 +0800 


    2012/11/20 01:56:47 org.apache.catalina.core.ApplicationContext log 

    Connecting to database specified by database.yml 


    2012/11/20 01:56:49 org.apache.catalina.core.ApplicationContext log 


    ActionController::RoutingError (No route matches [GET] "/assets/rails.png"): 
    gems/gems/actionpack-3.2.9/lib/action_dispatch/middleware/debug_exceptions.rb:21:in `call' 
    gems/gems/actionpack-3.2.9/lib/action_dispatch/middleware/show_exceptions.rb:56:in `call' 
    gems/gems/railties-3.2.9/lib/rails/rack/logger.rb:32:in `call_app' 
    gems/gems/railties-3.2.9/lib/rails/rack/logger.rb:16:in `call' 
    gems/gems/activesupport-3.2.9/lib/active_support/tagged_logging.rb:22:in `tagged' 
    gems/gems/railties-3.2.9/lib/rails/rack/logger.rb:16:in `call' 
    gems/gems/actionpack-3.2.9/lib/action_dispatch/middleware/request_id.rb:22:in `call' 
    gems/gems/rack-1.4.1/lib/rack/methodoverride.rb:21:in `call' 
    gems/gems/rack-1.4.1/lib/rack/runtime.rb:17:in `call' 
    gems/gems/activesupport-3.2.9/lib/active_support/cache/strategy/local_cache.rb:72:in `call' 
    gems/gems/rack-1.4.1/lib/rack/lock.rb:15:in `call' 
    gems/gems/rack-cache-1.2/lib/rack/cache/context.rb:136:in `forward' 
    gems/gems/rack-cache-1.2/lib/rack/cache/context.rb:245:in `fetch' 
    gems/gems/rack-cache-1.2/lib/rack/cache/context.rb:185:in `lookup' 
    gems/gems/rack-cache-1.2/lib/rack/cache/context.rb:66:in `call!' 
    gems/gems/rack-cache-1.2/lib/rack/cache/context.rb:51:in `call' 
    gems/gems/railties-3.2.9/lib/rails/engine.rb:479:in `call' 
    gems/gems/railties-3.2.9/lib/rails/application.rb:223:in `call' 
    file:/lib/jruby-rack-1.1.10.jar!/rack/handler/servlet.rb:22:in `call' 




    2012/11/20 14:01:21 org.apache.catalina.core.ApplicationContext log 

    Started GET "/demo/order/add" for 127.0.0.1 at 2012-11-20 14:01:21 +0800 


    2012/11/20 14:01:21 org.apache.catalina.core.ApplicationContext log 

    Processing by OrderController#add as HTML 


    2012/11/20 14:01:21 org.apache.catalina.core.ApplicationContext log 

    Rendered order/add.html.erb within layouts/application (16.0ms) 


    2012/11/20 14:01:21 org.apache.catalina.core.ApplicationContext log 

    Completed 500 Internal Server Error in 78ms 

它似乎是發生路由問題,是否在部署除ROOT位置以外的rails應用程序時出現問題? N +

我研究過這個類似的話題,我嘗試了一些解決方法,比如 在production.rb中加入下面的命令,但是沒有幫助。

config.action_controller.relative_url_root = "/demo" 

感謝您的解決方案

+0

+1之前生成靜態的內容...我已經預編譯我的資產,但設置config.action_controller.relative_url_root –

回答

3

你啁啾之前預編譯的資產?

你需要運行rake assets:precompile運行warble

+0

非常感謝需要,它的工作原理。是否需要在資產文件夾更改後每次運行命令? – Hang

+0

是的,有點麻煩。編譯資產需要很長時間。對於開發者,我們通常在本地運行'rails server'。我們只爲QA和PROD服務器編譯資產和warble。它由我們的CI完成。 – arkadiy

+2

還有一件重要的事情:如果你編譯你的本地開發文件夾中的資產並運行'rails server',它將會收集你的資產兩次。從應用/資產和公共/資產。在運行'rails server'之前,你需要清理compliled資源。 '耙資產:乾淨'應該做的工作 – arkadiy