rails

rails

Rails框架首次提出是在2004年7月,它的研發者是26歲的丹麥人David Heinemeier Hansson。不同於已有複雜的Web開發框架,Rails是一個更符合實際需要而且更高效的Web開發框架。Rails結合了PHP體系的優點(快速開發)和Java體系的優點(程序規整),因此,Rails在其提出后不長的時間裡就受到了業內廣泛的關注。

基本情況


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代碼中。如呈現部件和模板等控制器功能,現在也是相互獨立的,並且可以嵌入到任一庫中。

改進


Rails3中變動的數量太多,無法在此全部列出。要閱讀帶有補充資料的完整列表,請查詢Rails3發布通知。這裡僅介紹一些很可能會影響到開發人員的一些變動:
1.一條命令可以控制所有事件。有了Rails3,無需在每一個應用程序中使用整套腳本(script/server、script/generate以及其他),使用一條命令即可取代其功能,該命令恰如其分地被命名為rails。例如,在以前需要鍵入./script/console的地方,您現在只需鍵入rails console。
2.rails命令還可以像以前一樣生成新的應用程序。其運行方式依據其是否在現有的Rails應用程序中啟動而有所不同。
3.可為依賴性提供具體的解決方案。協調和解決gem依賴性是個棘手的問題。與可用gems的集合一樣,gem的修訂也是隨系統的不同而有所變化。因為具有這樣的多樣化,所以很難廣泛地部署或共享一個Rails應用程序。Rails3引入了Bundler,這是一個專門用於管理依賴性的實用程序(因此無需再使用config.gem)。您可以在應用程序根目錄內一個名為Gemfile的目錄中聲明依賴性。Bundler將下載和存儲所有指定的gem。您甚至可以在應用程序中“打包”gem,以便阻止從外部存儲庫下載。
4.不帶查詢語句的查詢功能。一直以來,Rails已經可以充分運用特定於領域的語言(DSL)—考慮一下has_one或validates_numericality_of—有一個明顯的例外:資料庫查詢。可以確定地說,Rails的動態搜尋器便捷、易用,但混合使用選項哈希值如:conditions、:order和:limit非常常見,因為都是find_by_sql語句。
5.Rails3合併了relational algebra,這是專門設計用於表示查詢的DSL。基本命令包括project(用於選擇列)、where(用於表示條件)、join(用於指定關係)、take和skip(分別用於限定和抵消),以及group(用於聚集)等其他屬性。
6.用於模糊樣板代碼的控制器。Rails控制器的核心操作—new、create、edit和update—通常不變,尤其是當控制器大部分用於CRUD操作時。事實上,控制器生成器的輸出./script/generate controller一般不需要進一步的修改就可以滿足需要。考慮到這些相似性,Rails3引入了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。這僅僅是一個小樣本。您可以在下一章節找到這些新功能的示例以及更多內容,例如從頭構建Rails3應用程序。

特點


全棧式的MVC框架
Rails是一個全棧式的MVC框架,換句話說,通過Rails可以實現MVC模式中的各個層次,並使它們無縫地協同運轉起來。
在實際開發一個MVC模式的Web應用項目時,如果使用Java開發,需要用到Struts(View層)、Hibernate(Model層)和Struts(Controller層)spring整合mvc3個框架,而且需要額外整合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也允許開發人員使用自己設計的代碼或視圖來替換自動生成的代碼和視圖。