基本情況
Ruby on Rails 是一個用於開發資料庫驅動的網路應用程式的完整框架。Rails基於MVC(模型- 視圖- 控制器)設計模式。從視圖中的Ajax套用,到控制器中的訪問請求和反饋,到封裝資料庫的模型,Rails 為你提供一個純Ruby的開發環境。發布網站時,你只需要一個資料庫和一個網路伺服器即可。
Ruby On Rails是一個用於編寫網路應用程式的軟體包.它基於一種計算機軟體語言Ruby,給程式開發人員提供了強大的框架支持.你可以用比以前少的多的代碼和 短的多的時間編寫出一流的網路軟體。
Ruby On Rails的指導原則是”不要重複你自己”(Don’t Repeat Yourself, 或DRY).意思是說你寫的代碼不會有重複的地方.比如以往資料庫的接口往往是類似的程式代碼但是在很多地方都要重複用到.這無論是給編寫還是維護都造成 了很大的代價.相反,Ruby On Rails給你提供了絕大多數的支持,讓你只需要短短的幾行代碼就可以實現強大的功能.而且,Rails提供了代碼生成工具,讓你甚至不需要編寫一行代碼 就實現強大的管理程式.
Ruby On Rails通過reflection和runtime extension減少了對configuration檔案的依靠,這和Java,C#語言的方向有很大不同,讓你減少了很多配置和部署的麻煩,但是性能上卻完全可以應付一般網站的需求.
Rails 支持各類網路伺服器和資料庫。在伺服器方面,我們推薦Apache、 lighttpd 或 nginx 代理至 Mongrel (或者使用FastCGI)。資料庫方面,你可以採用MySQL、PostgreSQL、SQLite、Oracle、SQL Server、DB2、 或其他任何我們支持的系統。 Rails可以在各類作業系統上運行,不過我們建議採用基於unix的系統進行開發。
發展歷程
Rails3.0經過兩年的改進,終於發布了。社區聚集了1600多貢獻者一起齊心協力,使一切變得更加美好,更快,更清潔,更美麗。
在過去的兩年中,Ruby on Rails 應用程式框架已經具備了一個由託管和服務提供商組成的一體式行業、一套功能廣泛且令人印象深刻的開發工具,還有各種在 Ruby 用語裡稱為 gems 和 plug-ins 的補充庫 — 可增強軟體的功能。例如 Engine Yard 和 Heroku 就是兩個提供虛擬的、方便的 Rails 軟體託管的公司;Oink 和 Bullet 分別用來顯示記憶體使用和性能;Clearance 和 Sunspot 則用來提供現成的身份驗證和快速的索引式搜尋。
自2007年Apple的Leopard上捆綁了Ruby on Rails出售以來,Rails 社區也已不斷壯大。全球有眾多的 Rails 開發人員充滿活力、團結互助,並且渴望不斷地改進該軟體。可以毫不誇張地說,Rails 的改進應歸功於社區,因為是程式設計師之間不斷的相互超越使得構建出的軟體越來越完善。如此不斷地循環,各個功能才得以從初期階段快速發展,逐漸變的實用、功能不斷強大並完善,最終成為不可或缺的工具。在很多情況下,社區認為最基本的 gems 和 plug-ins 都會保留到 Rails 核心中。Rails 的 named scopes(一個查詢捷徑),可實現與 nested forms 相同的功能。這是一個新增的功能,可取代以前的嘗試,並在相同的 HTML 表單中創建和編輯多個模型。實際上,對於 Rails 開發人員來說最困難的任務或許就是跟上變化的節奏。(幸運的是,目前有一些 Ruby 和 Ruby on Rails 的每周播客,這些播客會組織並呈現最新趨勢以及分享最佳實踐。)
Rails 下一個主要的發布是 Rails 版本 3,該版本繼續保持工具包的快速改進。與以往相同,該軟體仍然非常 “固執”,即仍然偏向於約定優於配置。Rails 的核心組件始終存在,即 RESTful 路徑、關係、驗證、模板和資料庫抽象化。不過,這些組件的許多內部內容已經被重寫或者進行了改進。最明顯的並且很大程度上借用了 Merb 的理念的就是很多 Rails 的基本功能不再密切結合。例如,以前只對 Rails 應用程式可用的數據驗證便捷功能現在成為獨立的組件,並且可以包含在 Vanilla Ruby 代碼中。如呈現部件和模板等控制器功能,現在也是相互獨立的,並且可以嵌入到任一庫中。
改進
Rails 3 中變動的數量太多,無法在此全部列出。要閱讀帶有補充資料的完整列表,請查詢 Rails 3 發布通知。這裡僅介紹一些很可能會影響到開發人員的一些變動:
1. 一條命令可以控制所有事件。有了 Rails 3,無需在每一個應用程式中使用整套腳本(script/server、script/generate 以及其他),使用一條命令即可取代其功能,該命令恰如其分地被命名為 rails。例如,在以前需要鍵入 ./script/console 的地方,您現在只需鍵入 rails console。
2. rails 命令還可以像以前一樣生成新的應用程式。其運行方式依據其是否在現有的 Rails 應用程式中啟動而有所不同。
3. 可為依賴性提供具體的解決方案。協調和解決 gem 依賴性是個棘手的問題。與可用 gems 的集合一樣,gem 的修訂也是隨系統的不同而有所變化。因為具有這樣的多樣化,所以很難廣泛地部署或共享一個 Rails 應用程式。Rails 3 引入了 Bundler,這是一個專門用於管理依賴性的實用程式(因此無需再使用 config.gem)。您可以在應用程式根目錄內一個名為 Gemfile 的目錄中聲明依賴性。Bundler 將下載和存儲所有指定的 gem。您甚至可以在應用程式中 “打包” gem ,以便阻止從外部存儲庫下載。
4. 不帶查詢語句的查詢功能。一直以來,Rails 已經可以充分運用特定於領域的語言 (DSL) — 考慮一下 has_one 或 validates_numericality_of — 有一個明顯的例外:資料庫查詢。可以確定地說,Rails 的動態搜尋器便捷、易用,但混合使用選項哈希值如 :conditions、:order 和 :limit 非常常見,因為都是 find_by_sql 語句。
5. Rails 3 合併了 relational algebra,這是專門設計用於表示查詢的 DSL。基本命令包括 project(用於選擇列)、where(用於表示條件)、join(用於指定關係)、take 和 skip(分別用於限定和抵消),以及 group(用於聚集)等其他屬性。
6. 用於模糊樣板代碼的控制器。Rails 控制器的核心操作 —new、create、edit 和 update — 通常不變,尤其是當控制器大部分用於 CRUD 操作時。事實上,控制器生成器的輸出 ./script/generate controller 一般不需要進一步的修改就可以滿足需要。考慮到這些相似性,Rails 3 引入了 Responder 來進一步簡化代碼。例如下面是 create 操作全部所需的幾行代碼:
class PostsController respond_to :html, :xml
def create
@post = Post.create(params[:post])
respond_with(@post)
end
end
在該代碼片段中,如果 @post 保存成功,respond_with(@post) 將傳送到 show 以顯示新的記錄,而假設對象的驗證失敗,則傳送到 new。 這僅僅是一個小樣本。您可以在下一章節找到這些新功能的示例以及更多內容,例如從頭構建 Rails 3 應用程式。
特點
全棧式的MVC框架
Rails是一個全棧式的MVC框架,換句話說,通過Rails可以實現MVC模式中的各個層次,並使它們無縫地協同運轉起來。
在實際開發一個MVC模式的Web套用項目時,如果使用Java開發,需要用到Struts(View 層)、Hibernate(Model層)和Struts(Controller 層)spring 整合mvc 3個框架,而且需要額外整合3個框架開發出的內容。而使用Ruby語言開發相同的項目時,只需要用到Rails框架就可以完成。
約定優於配置
為了說明各個對象之間的關聯關係,一般的Web套用開發框架往往採用寫入XML配置檔案的方法。這種方式雖然可以解決一些問題,但是卻帶來了管理上的混亂。
Rails 對此的態度是約定優於配置,這意味著在Rails中不會出現XML配置檔案。Rails使用Web套用多年來積累的各種常見約定(更具體地說是命名規則)來代替XML配置檔案,而在Rails內部的映射與發現機制根據這些約定可以實現對象之間的關聯。在第1章中,通過Rails的映射與發現機制實現了數據表與Ruby對象之間的關聯。
更少的代碼
使用約定來代替XML配置檔案說明Rails本身完成了大量的底層工作,這意味著使用更少的代碼來實現應用程式是極有可能的。此外,代碼量的縮減也減小了出現bug的可能性,降低了維護程式和升級程式的難度。
生成器
Rails 使用的實時映射技術和元編程技術,免去了開發人員在開發過程中編寫大量樣板檔案代碼的煩惱。在少數需要使用樣板檔案代碼的時候,開發人員可以通過 Rails內建的生成器腳本實時創建,而不再是通過手工編寫。Rails的這個特點可以使開發人員更專注於系統的邏輯結構,而不必為一些瑣碎的細節所煩擾。
零周轉時間
對已有的Web套用系統進行修改後,其一般需要經過配置、編譯、發布、重新設定、測試等一系列步驟才能投入使用,這明顯浪費了許多時間。而使用Rails開發Web套用系統,可以通過瀏覽器即時查看程式運行結果,從而節約了大量的時間。
支架系統
Rails的支架系統可以自動為任何相關的資料庫表創建一套包含標準CRUD操作和前台視圖的系統。通過支架系統,開發人員可以方便快捷地操縱資料庫中的數據表。此外,Rails也允許開發人員使用自己設計的代碼或視圖來替換自動生成的代碼和視圖。
指導原則
Rails的指導原則是"不要重複你自己"(Don't Repeat Yourself, 或DRY).意思是說你寫的代碼不會有重複的地方.比如以往資料庫的接口往往是類似的程式代碼但是在很多地方都要重複用到.這無論是給編寫還是維護都造成了很大的代價.相反,Rails給你提供了絕大多數的支持,讓你只需要短短的幾行代碼就可以實現強大的功能.而且,Rails提供了代碼生成工具,讓你甚至不需要編寫一行代碼就實現強大的管理程式.Rails通過reflection和runtime extension減少了對configuration檔案的依靠,這和Java,C#語言的方向有很大不同,讓你減少了很多配置和部署的麻煩,但是性能上卻完全可以應付一般網站的需求.