跳到主要內容區塊

計資中心電子報C&INC E-paper

專題報導

Ruby on Rails (ROR)
  • 卷期:v0001
  • 出版日期:2007-06-20

作者:蔡佳燕 / 臺灣大學計算機及資訊網路中心程式設計組


最簡潔有力的網頁框架,網頁的「殺手程式Killer Application」,網頁程式設計的「簡約奢華時尚」。網頁應用程式的軟體從業人員可以試試Ruby on Rails,說不定真的可以在「鐵軌上找到紅寶石」喔!

 

簡介

開發網頁應用程式的軟體從業人員們,還在為寫程式或寫設定檔而焦頭爛額嗎?試試Ruby on Rails,就算你不喜歡,也不會有任何偒害。事實上很多人用了就上癮了,因為它為你節省許多寶貴的時間,假日不必再到公司加班,每天準時下班。你開心,老闆開心,大家都開心,它是怎麼做到的呢?

 

Ruby(紅寶石)

認識Ruby on Rails之前,我們先來看看Ruby是什麼?Ruby的作者是個名叫松本行弘(Yukihiro Matsumoto, matz)的日本人,他在用了多種不符他需求的程式語言後,決定開發一個比Perl功能更強大,比Python更物件導向的程式設計語言。Ruby這個用C語言寫成的純物件導向Script Language因此誕生了。松本的設計理念是給程式設計師最少的驚奇(principle of least surprise),他站在程式設計者的角度設想,希望程式設計者使用Ruby能得心應手,用得快樂,迅速開發。Ruby第一個alpha測試版是在1994年12月釋出,雖然在1995年在日本正式釋出時,日本人並不陌生,但英文版的Ruby則是到1998年年底才出現。

An Introduction to Ruby的作者Colin Steele說:「Ruby 結合了Smalltalk, C, Perl, and Python 最棒的特色,非常地優雅自然,在一天之內我就著迷了。」

命名小插曲-Ruby指的是珍貴的紅寶石,它不是字頭縮寫字。松本跟他的朋友開玩笑說這個新語言一定也要是個寶石的名字,要像Perl是珍珠(Pearl)的諧音之類的,他的朋友馬上提出「Ruby」,這個名字被松本採用了。而且松本後來發現很巧的是Perl(Pearl)是六月的誕生石,Ruby是七月的誕生石。

想要更進一步認識這個珍貴的紅寶石嗎?請參考以下的網站

http://www.ruby-lang.org/

http://www.rubygarden.org/

 

Ruby on Rails

接下來我們就要來看看Ruby on Rails。Ruby on Rails是用Ruby寫的網頁應用程式開發框架(web application framework),一般簡稱"Rails"或是"RoR"。它的作者是David Heinemeier Hansson (簡稱DHH) ,一個來自丹麥的年輕程式師。RoR是他為了Basecamp專案而開發的架構,之後在2005年釋出的open source project,目標是要加快以資料庫驅動的網站的開發速度與簡化過程。要達成這個目標,有兩個重大原則:一個是絕不做重覆的事,(DRY, Don’t Repeat Yourself),程式設計師要寫的程式碼愈少愈好,因為程式碼少的話,出錯的機率也會降低,最後維護起來也容易;另一個原則是用慣例(通則)取代設定(Convention over Configuration)。

 

20070620007001.jpg

 

MVC (Model-View-Controller)

RoR的基本架構是MVC(Model-View-Controller),Model處理和資料庫之間的溝通,View則是產生使用者介面,使用者透過View的頁面發出要求,Controller則是處理使用者的要求,若要使用到資料庫,則和Model溝通,由Model去進行資料庫的存取,再由View根據結果產生使用者看到的頁面。依照這樣的處理模式,資料的處理和使用者介面不會互相干擾,程式較容易撰寫也較容易維護。

 

Active Record

Active Record是RoR所提供的ORM (Object/Relational Mapping) layer。RoR是資料庫驅動的網頁開發程式,所以資料庫的處理是非常重要的。Active Record會做如下的對應動作:

Database

 

Model

tables

à

classes

rows

à

objects

columns

à

attributes


Active Record主要利用到之前提到的原則之一,就是慣例取代設定。例如你的程式中有一個名為Student的class,Active Record 的慣例就是會將這個class對應到資料庫中名為students (student的複數形式)的table,你不需要再額外設定告訴RoR要用什麼名字的table。而且Active Record的英文能力夠強,對於不規則的複數形式變化也應付自如,例如:Person => people。如果要利用到既存的資料庫,無法按照RoR的命名慣例,RoR當然也提供更改設定的方法,只是這麼一來,RoR提供的某些便利性也無法利用到了。

 

ERb (Embedded Ruby)

在View的這部份,檔案的副檔名為".rhtml",Rails看到這個副檔名就知道要使用ERb來展開該檔的內容。在此值得注意的是,controller物件中的instance變數是可以直接在View樣板物件中被使用的。

 

Scaffold(由資料庫自動產生可以使用的程式)

當你把資料庫建立好,接下來用一個簡單的Scaffold動作,你將擁有整個專案程式的雛形,也許使用者介面還不夠漂亮,但是程式已經堪用,它有最基本的CRUD(Create, Read, Update, Delete)功能。這邊同樣也應用了慣例取代設定的原則,整個專案的目錄架構也是有其慣例。

 

為什麼要用RoR呢?

多數人的答案是一開始就提到的「快速開發」。很多人用過以後都覺得開發效率提高數倍,而程式設計師寫的程式碼則簡潔許多。當然世界如此之大,不可能眾口一致,也有人持不同意見,有人考量到程式執行的速度,所以不敢貿然採用RoR,有人以執行的效能對RoR的作者DHH提出質疑,DHH的回答是:如果用Ruby無法突破瓶頸,那麼瓶頸部份用C 或其他語言寫也無妨,他們自己也是這麼做,但是你還是可以在開發初期善加利用RoR的高效能開發來節省時間。

 

哪些網站使用RoR?

目前使用RoR架構的網站是數以萬計的,其實勇於嘗新的人還不少,想知道哪些網站使用RoR嗎?請參考以下連結:http://wiki.rubyonrails.org/rails/pages/RealWorldUsage

 

目前使用RoR架構的網站是數以萬計的,其實勇於嘗新的人還不少,想知道哪些網站使用RoR嗎?請參考以下連結:http://wiki.rubyonrails.org/rails/pages/RealWorldUsage

另外簡單列出幾個不同性質的網站以供參考,首先看到Basecamp,其實RoR就是由Basecamp抽取出來的。

  • Basecamp – 線上專案管理系統

  • OpenCongress – 集合美國國會的新聞及官方資料

  • Revolution Health – 一個關於健康的入口網站

  • Twitter – 提供小型部落格及傳遞訊息服務

  • HEMiDEMi – (繁體中文)是社群式書籤分享網站,使用者在網路漫遊時,發現喜愛的書籤,就可以收藏在HEMiDEMi

 

RoR的願景 (REST, REpresentational State Transfer)

遵循REST的概念,所謂的REST,簡單來說就是「在對於網路上可用資源操作CRUD之類的動作時,使用適當的HTTP method (GET, POST, PUT, DELETE),而不用傳統以URL表示request的作法」。而RoR提供ActiveResource讓使用者開發REST-client 的網頁服務,ActiveResource的運作類似ActiveRecord,但是他運作的對象是網路上的所有資源,而不再只是資料庫裡的記錄。

 

CRUD operation

REST method

Create

POST

Read

GET

Update

PUT

Delete

DELETE

 

Reference:

Text book: Agile Web Development with Rails