在JRuby下將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能夠給原有的開發方式帶來哪些好處。
可以同時使用Java和Ruby的類庫(gems)
使用現有的Java平臺部署Ruby或Ruby on Rails應用程序
用Ruby調用或者擴展Java類的能力(包括Spring-managed Java Beans)
可以使用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)正是目前技術發展的一大趨勢。
【編輯推薦】