Ruby on Rails（官方簡稱為 Rails，亦被簡稱為 RoR），是一個使用 Ruby 語言寫的開源 Web 應用框架，它是嚴格按照 MVC 結構開發，努力使自身保持簡單，使實際應用開發時的程式碼更少，使用最少的組態。

Rails 的設計原則包括「不做重複的事」（Don't Repeat Yourself）和「慣例優於設定」（Convention Over Configuration）。



Ruby on Rails 介紹

Ruby on Rails 是一種結合 Ruby 語言與 Rails 平台的一種網頁程式框架，Ruby 語言以自然、簡潔、快速著稱，全面支援物件導向程式設計，而 Rails 則是 Ruby 廣泛應用方式之一，在 Rails 平台上設計出一套獨特的 MVC 開發架構，採取模型（Model）、視圖（View）、控制器（Controller）分離的開發方式，不但減少了開發中的問題，更簡化了許多繁複的動作。



應用

Ruby on Rails 的數千個程式已經線上上得到應用。
現在使用 Ruby on Rails 的網站有：


* Basecamp

* Twitter

* GitHub

* Groupon

* Shopify

* Yellow Pages

* GitLab

* Coinbase

* Crypto.com



歷史

於 2004 年 7 月，Rails 的創始人大衛・漢森從 37signals 公司的項目管理工具 Basecamp 分離出 Ruby on Rails，並且以開源方式發佈。

Rails 在發佈以後的短短的時間內就迅速獲得很多開發人員歡迎，大衛認為這歸功於 Rails 設計為 opinionated software。Rails 當中有很多規矩從一開始就按照 David 的意見制定好了，所以在 Rails 上開發應用程式時，開發人員可以專注於應用程式自身的設計，省卻那些花在瞭解及組態基礎框架上面的時間。這也正是 Rails 很重要的精神「約定優於組態」，開發人員遵照 Rails 本身的慣例便可以省卻組態組態檔的時間；此外，Rails 雖然強調慣例的重要及便利性，但針對不同的需求，Rails 也提供修改的空間讓開發人員可以進行自訂的組態。



Rails 的運作模式

Rails 框架是以固定的命名習慣來自動判斷整個架構，預設下會將網址分析成 http://domain-name/ControllerName/ActionName/Attribute/ 然後執行目標 Controller 中的 Action，並取出指定的 View（視圖）回傳給瀏覽器顯示。

面對資料庫則以 Model（模組）的形式，藉由 Active Record 作為與資料庫之間的傳輸介面。



Rails 的 MVC 架構

Ruby on Rails 的模型 - 視圖 - 控制器架構由以下各部分組成：

模型

模型包含著應用的狀態，狀態可能是臨時的也可能是長久性儲存在資料庫中的。需要注意的是模型不僅包含資料，而且包含資料代表的邏輯。在 Rails 中，_模型_通常是由一些代表關聯式資料庫中 RDBMS 表的類組成的。

在 Rails 中，模型類是通過 Active Record 模式進行處理的。一般來說，程式設計師要做的是繼承 `ActiveRecord` 類，同時程式會自動計算出要使用哪個 RDBMS 表，這個表有哪些列。表與表之間的關係通過簡單的命令來指明。

視圖

View 負責根據 Model 中的資料顯示使用者介面。作為 web 應用，Rails 裡的 View 通常是生成整個或者部分網頁。當然可以是 XML 或者甚至是 JavaScript 程式碼。表現為使用內嵌 Ruby 的 HTML／XML／JavaScript 模板。

控制器

控制器將使用者介面和資料模型關聯起來，並充當協調運作的角色。它接收各種使用者操作，更新資料模型，並用合適的 view 展示結果給使用者。像他的名字一樣，可以說應用的主要控制中心就是各個控制器。



Rails 的組成模組

模型：Active Record

ActiveRecord 實現了 Rails 的物件關係對映。

控制器和視圖：ActionPack

ActionController 是 Rails 中的控制器，提供各種方法供使用者操作使用。

ActionView 是 Rails 中的視圖，負責展現使用者介面。

常用實用工具：ActiveSupport

ActiveSupport 包提供一些工具和支援程式碼。

處理郵件：ActionMailer

ActionMailer 用來傳送和接收 email。

Web 服務：ActionWebService

ActionWebService 來提供 SOAP 和 XML-RPC 支援。需要注意的是，Rails 趨向使用更加簡單明瞭的 REST 方式 web 服務而不再提倡 SOAP 格式的 web 服務。ActionWebServices 在未來的版本裡面會逐步淡出。

網路資源：ActiveResource

用 REST 對 Web 服務提供了優秀的支援。這種風格的 Web 服務使用指定的資源。

Rails 中的 AJAX

AJAX（非同步 JavaScript 與 XML）是一種非同步傳輸介面，可以藉由瀏覽器使用 JavaScript 和 XML 或其他資料格式來處理傳輸請求，而將 Web 伺服器作為後台來處理，這樣無須載入額外的網頁。Rails 內建有 Prototype 套件來實現這個技術。Ajax 已經和 Ruby on Rails 結合在了一起成為了一個新的系統叫做「Ajax on Rails」。Rails 提供一些助手工具來更方便地實現 AJAX 應用。
Rails 提供了一些 Helper，可以在伺服器一端用純 Ruby 語言生成給瀏覽器用的 JavaScript 程式碼，從而讓 Rails 的開發者不需掌握 JavaScript 就可以簡單方便的開發出 AJAX 的應用。



Rails 和 Web 服務

稍早的版本的 Rails 中提供了 ActionWebService 作為開發 XML-RPC 和 SOAP 的 web 服務的基礎。但是最近的 Rails 1.2 更加傾向於是用 REST 方式的 web 服務，而 ActionWebService 在 Rails 2.0 中作為 plugin 而不再是 rails 核心的一部分。



Web 伺服器支援

對於開發和測試來說，一個很輕量的 WEBrick 網頁伺服器已經被包含在了 Ruby 中，常被用來作為應用伺服器。而對於生產應用，常推薦使用帶 FastCGI 的 Apache 或者 Lighttpd，但任何支援 CGI 或者 FastCGI 的網頁伺服器都可以使用。在 Apache 上，mod\_ruby 也可以考慮用來提高效能。



資料庫支援

使用 Rails 的架構開發網路應用一般都使用資料庫，所以推薦使用一個關聯式資料庫系統來進行數據儲存，若不能運行一個關聯式資料庫伺服器，Rails 支援嵌入式資料庫 SQLite。Rails 還支援關聯式資料庫系統，包括 MySQL、PostgreSQL、IBM DB2、Oracle 和 SQL Server。



系統要求


* Ruby 語言

* Web 伺服器，如 Apache、lighttpd 等。

* FastCGI，或者 Mongrel 為了提高效率

* 資料庫和驅動程式



整合式開發環境

開發用的 IDE 有：Eclipse，MyEclipse，NetBeans，RubyMine，Aptana，Sublime Text，Visual Studio Code



類似的框架

PHP 語言


* CakePHP

* Laravel

* Yii

* CodeIgniter

Python 語言


* Django

* TurboGears

Perl 語言


* Catalyst

Elixir 語言


* Phoenix Framework

Node.js 環境


* Sails.js



參考文獻



外部連結

官方網站


* （英文）Ruby On Rails 官方網站（頁面存檔備份，存於網際網路檔案館）

* （繁體中文）Ruby on Rails 台灣官方網站（頁面存檔備份，存於網際網路檔案館）

其他


* Ruby 中國社群（頁面存檔備份，存於網際網路檔案館）

* Onlamp.com 的 Ajax on Rails（頁面存檔備份，存於網際網路檔案館）

* Fast-track your Web apps with Ruby on Rails（頁面存檔備份，存於網際網路檔案館）（David Mertz article at IBM developerWorks）

* Ruby on Rails 和 J2EE：兩者能否共存？（頁面存檔備份，存於網際網路檔案館）

* Full Ruby on Rails Tutorial

* Steve Yegge 把 Rails 移植到 JavaScript/Rhino（頁面存檔備份，存於網際網路檔案館）

* Ruby 編寫的 JavaEye 中的 ruby 論壇