天天看點

将RoR項目部署到Tomcat(轉貼)

由于Ruby的開發者社群不斷增長,其影響力越來越大,主流的開發平台Java和.Net都向它抛出了橄榄枝。Sun支援了運作于JVM的JRuby,而微軟也支援了Iron Ruby項目。靈活咨詢公司ThoughtWorks已經釋出了基于JRuby一個靈活項目管理工具Mingle,使JRuby成為了最近社群關注的焦點。

開發一個JRuby項目對于大多數正在觀望Ruby和Rails技術的Java開發者來說是一個非常有吸引力的事情,因為這樣可以用平常所熟悉的環境去學習或者開發Ruby on Rails項目。在JRuby項目的主要開發者加入Sun的時候,Java社群JavaEye(使用Rails開發)的站長robbin曾經這樣評價Java和Ruby的聯姻:

單純從web項目的開發效率上衡量,Java已經無法和ruby on rails相提并論,但有趣的是Java并非完全站在ruby on rails的競争對立面。由于Ruby的第三方庫遠遠無法和Java相提并論,ruby其運作效率也無法和成熟的JVM相比,而我們知道,JVM從理論上來說,也并非可以僅僅支援Java一種語言。因而将ruby移植到JVM上面來,結合ruby的開發效率優勢和Java豐富類庫支援,強大Java運作平台優勢就是順理成章的事情了,JRuby正是實作這一目标的架構。而Sun對于JRuby提供的強力支援,更加表達了Java與ruby攜手的決心。

在Mingle成功釋出以後,JRuby的技術和産品都已經更接近開發者了。但是,實際上大部分的Java和Ruby社群的開發者都還沒有實際使用JRuby開發,因為這個混合技術似乎還處于神秘狀态,隻有少數核心開發者知道如何使用它。最近在Digital Sanctum的blog上釋出了一系列和JRuby相關的文章,根據裡面的指導我們可以嘗試将Ruby on Rails項目部署在Tomcat上,這個過程可以讓我們揭下JRuby的神秘面紗,下面我們看看這個過程。

首先,我們回顧一下我為什麼要安裝JRuby?也就是JRuby能夠給原有的開發方式帶來哪些好處。

  1. 可以同時使用Java和Ruby的類庫(gems)
  2. 使用現有的Java平台部署Ruby或Ruby on Rails應用程式
  3. 用Ruby調用或者擴充Java類的能力(包括Spring-managed Java Beans)
  4. 可以使用Ruby以不啰嗦且更有趣的方式寫代碼。

在準備好實驗JRuby後,首先需要安裝JRuby環境,這個過程比較簡單,請參考Digital Sanctum的這篇JRuby安裝指南。

然後,如果您想在JRuby上面從頭開發Rails應用,可以按照Digital Sanctum描述的在JRuby下建立rails項目并部署到tomcat的流程學習。

但是,如果您手頭已經有了一個RoR的項目,則您可以關注其中關鍵的兩步:

第一步是要安裝ActiveRecord-JDBC,使用這個指令:

gem install ActiveRecord-JDBC

安裝ActiveRecord-JDBC後,需要修改database.yml,修改其中的擴充卡為“jdbc”并指定相應的Driver和URL。然後繼續修改config/enviroment.rb中的将連接配接擴充卡配置。

if RUBY_PLATFORM =~ /java/

        require 'rubygems'

        RAILS_CONNECTION_ADAPTERS = %w(jdbc)

end

您還需要将mysql-connector JDBC驅動的jar檔案拷貝到/lib和/common/lib下面。

第二步,是部署到Tomcat上的最重要的一部,打包。您需要安裝一個Rails插件goldspike:

jruby script/plugin install svn://rubyforge.org/var/svn/jruby-extras/trunk/rails-integration/plugins/goldspike

然後您隻需要在您的應用程式的根目錄執行一個rake任務就可以生成war包了。

rake war:standalone:create

最後将生成的war包拷貝到您的/webapps目錄并啟動tomcat就可以看到您的RoR應用了。

這裡隻摘要了将RoR項目部署在Tomcat的關鍵流程,很多細節這裡沒有引用,如果感興趣您可以參考原文。

因為RoR是Ruby的殺手應用,而Tomcat是Java平台最著名的開源Servlet容器,兩者的強強結合其實預示了Ruby在傳統平台(Java及.NET)繼續爆發的潛力。它允許您開發混合平台,發揮語言和平台各自的特長,混合或者融合(mush up)正是目前技術發展的一大趨勢。

繼續閱讀