在JRuby下將RoR項(xiàng)目配置到tomcat詳解
由于Ruby的開(kāi)發(fā)者社區(qū)不斷增長(zhǎng),其影響力越來(lái)越大,主流的開(kāi)發(fā)平臺(tái)Java和.Net都向它拋出了橄欖枝。Sun支持了運(yùn)行于JVM的JRuby,而微軟也支持了Iron Ruby項(xiàng)目。敏捷咨詢(xún)公司ThoughtWorks已經(jīng)發(fā)布了基于JRuby一個(gè)敏捷項(xiàng)目管理工具M(jìn)ingle,使JRuby成為了最近社區(qū)關(guān)注的焦點(diǎn)。
開(kāi)發(fā)一個(gè)JRuby項(xiàng)目對(duì)于大多數(shù)正在觀(guān)望Ruby和Rails技術(shù)的Java開(kāi)發(fā)者來(lái)說(shuō)是一個(gè)非常有吸引力的事情,因?yàn)檫@樣可以用平常所熟悉的環(huán)境去學(xué)習(xí)或者開(kāi)發(fā)Ruby on Rails項(xiàng)目。在JRuby項(xiàng)目的主要開(kāi)發(fā)者加入Sun的時(shí)候,Java社區(qū)JavaEye(使用Rails開(kāi)發(fā))的站長(zhǎng)robbin曾經(jīng)這樣評(píng)價(jià)Java和Ruby的聯(lián)姻:
單純從web項(xiàng)目的開(kāi)發(fā)效率上衡量,Java已經(jīng)無(wú)法和ruby on rails相提并論,但有趣的是Java并非完全站在ruby on rails的競(jìng)爭(zhēng)對(duì)立面。由于Ruby的第三方庫(kù)遠(yuǎn)遠(yuǎn)無(wú)法和Java相提并論,ruby其運(yùn)行效率也無(wú)法和成熟的JVM相比,而我們知道,JVM從理論上來(lái)說(shuō),也并非可以?xún)H僅支持Java一種語(yǔ)言。因而將ruby移植到JVM上面來(lái),結(jié)合ruby的開(kāi)發(fā)效率優(yōu)勢(shì)和Java豐富類(lèi)庫(kù)支持,強(qiáng)大Java運(yùn)行平臺(tái)優(yōu)勢(shì)就是順理成章的事情了,JRuby正是實(shí)現(xiàn)這一目標(biāo)的框架。而Sun對(duì)于JRuby提供的強(qiáng)力支持,更加表達(dá)了Java與ruby攜手的決心。
在Mingle成功發(fā)布以后,JRuby的技術(shù)和產(chǎn)品都已經(jīng)更接近開(kāi)發(fā)者了。但是,實(shí)際上大部分的Java和Ruby社區(qū)的開(kāi)發(fā)者都還沒(méi)有實(shí)際使用JRuby開(kāi)發(fā),因?yàn)檫@個(gè)混合技術(shù)似乎還處于神秘狀態(tài),只有少數(shù)核心開(kāi)發(fā)者知道如何使用它。最近在Digital Sanctum的blog上發(fā)布了一系列和JRuby相關(guān)的文章,根據(jù)里面的指導(dǎo)我們可以嘗試將Ruby on Rails項(xiàng)目部署在Tomcat上,這個(gè)過(guò)程可以讓我們揭下JRuby的神秘面紗,下面我們看看這個(gè)過(guò)程。
首先,我們回顧一下我為什么要安裝JRuby?也就是JRuby能夠給原有的開(kāi)發(fā)方式帶來(lái)哪些好處。
可以同時(shí)使用Java和Ruby的類(lèi)庫(kù)(gems)
使用現(xiàn)有的Java平臺(tái)部署Ruby或Ruby on Rails應(yīng)用程序
用Ruby調(diào)用或者擴(kuò)展Java類(lèi)的能力(包括Spring-managed Java Beans)
可以使用Ruby以不啰嗦且更有趣的方式寫(xiě)代碼。
在準(zhǔn)備好實(shí)驗(yàn)JRuby后,首先需要安裝JRuby環(huán)境,這個(gè)過(guò)程比較簡(jiǎn)單,請(qǐng)參考Digital Sanctum的這篇JRuby安裝指南。
然后,如果您想在JRuby上面從頭開(kāi)發(fā)Rails應(yīng)用,可以按照Digital Sanctum描述的在JRuby下創(chuàng)建rails項(xiàng)目并部署到tomcat的流程學(xué)習(xí)。
但是,如果您手頭已經(jīng)有了一個(gè)RoR的項(xiàng)目,則您可以關(guān)注其中關(guān)鍵的兩步:
第一步是要安裝ActiveRecord-JDBC,使用這個(gè)命令:
gem install ActiveRecord-JDBC
安裝ActiveRecord-JDBC后,需要修改database.yml,修改其中的適配器為“jdbc”并指定相應(yīng)的Driver和URL。然后繼續(xù)修改config/enviroment.rb中的將連接適配器配置。
- if RUBY_PLATFORM =~ /java/
- require 'rubygems'
- RAILS_CONNECTION_ADAPTERS = %w(jdbc)
- end
您還需要將mysql-connector JDBC驅(qū)動(dòng)的jar文件拷貝到/lib和/common/lib下面。
第二步,是部署到Tomcat上的最重要的一部,打包。您需要安裝一個(gè)Rails插件goldspike:
jruby script/plugin install svn://rubyforge.org/var/svn/jruby-extras/trunk/rails-integration/plugins/goldspike
然后您只需要在您的應(yīng)用程序的根目錄執(zhí)行一個(gè)rake任務(wù)就可以生成war包了。
rake war:standalone:create
最后將生成的war包拷貝到您的/webapps目錄并啟動(dòng)tomcat就可以看到您的RoR應(yīng)用了。
這里只摘要了將RoR項(xiàng)目部署在Tomcat的關(guān)鍵流程,很多細(xì)節(jié)這里沒(méi)有引用,如果感興趣您可以參考原文。
因?yàn)镽oR是Ruby的殺手應(yīng)用,而Tomcat是Java平臺(tái)最著名的開(kāi)源Servlet容器,兩者的強(qiáng)強(qiáng)結(jié)合其實(shí)預(yù)示了Ruby在傳統(tǒng)平臺(tái)(Java及.NET)繼續(xù)爆發(fā)的潛力。它允許您開(kāi)發(fā)混合平臺(tái),發(fā)揮語(yǔ)言和平臺(tái)各自的特長(zhǎng),混合或者融合(mush up)正是目前技術(shù)發(fā)展的一大趨勢(shì)。
【編輯推薦】