（官方简称为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

参考文献
----

1. ↑  David.. Ruby on Rails.  [2017-03-01]. （原始内容存档于2015-12-17）.
2. ↑ . 2023年8月10日  [2023年8月14日].
3. ↑ .  [2020-09-26]. （原始内容存档于2020-09-22）.

外部链接
----

### 官方網站

|  |  |
| --- | --- |
|  | 維基教科書中的相關電子：**Ruby on Rails** |

* （英文）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论坛

|  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |
| --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- |
| 

| * 
* 论
* 编
Web应用框架 |
| --- |
|  |
| 
* 比较

 |
|  |
| C++ | 
* CppCMS（英语：）
* Wt（英语：）

 |
|  |
| CLI | 
* ASP.NET
	+ Core
	+ AJAX
	+ 动态数据（英语：）
	+ MVC
	+ Razor（英语：）
	+ Web Forms
* DNN（英语：）
* BFC（英语：）
* MonoRail（英语：）
* OpenRasta（英语：）
* Umbraco

 |
|  |
| ColdFusion | 
* CFWheels
* ColdBox Platform（英语：）
* ColdSpring（英语：）
* Fusebox（英语：）
* Mach-II（英语：）
* Model-Glue（英语：）

 |
|  |
| Common Lisp | 
* Caveman2（英语：）
* CL-HTTP（英语：）
* UnCommon Web（英语：）
* Weblocks

 |
|  |
| D | 
* Vibe.d（英语：）

 |
|  |
| Haskell | 
* Happstack（英语：）
* Yesod（英语：）
* Snap（英语：）

 |
|  |
| Java | 
* AppFuse（英语：）
* Flexive（英语：）
* Grails（英语：）
* GWT
* ICEfaces（英语：）
* ItsNat（英语：）
* JavaServer Faces
* JHipster（英语：）
* Jspx（英语：）
* JWt（英语：）
* OpenXava（英语：）
* Play
* Reasonable Server Faces（英语：）
* Remote Application Platform（英语：）
* RIFE（英语：）
* Seam（英语：）
* Spring
* Stripes（英语：）
* Struts
* Tapestry
* Vaadin（英语：）
* Vert.x
* WebWork（英语：）
* Wicket
* WaveMaker（英语：）
* ZK

 |
|  |
| JavaScript | 
* Ample SDK（英语：）
* Angular（英语：）/AngularJS
* Backbone.js
* Chaplin.js（英语：）
* Closure（英语：）
* Dojo Toolkit
* Ember.js
* Extjs
* JQuery
* Meteor（英语：）
* MooTools（英语：）
* Node.js
* Prototype
* React
* Rico
* script.aculo.us（英语：）
* Sencha Touch（英语：）
* SproutCore（英语：）
* Vue.js
* Wakanda（英语：）

 |
|  |
| Perl | 
* Catalyst
* Dancer（英语：）
* Mason（英语：）
* Maypole
* Mojolicious（英语：）
* WebGUI

 |
|  |
| PHP | 
* CakePHP（英语：）
* CodeIgniter
* Fat-Free
* FuelPHP
* Gyroscope（英语：）
* Horde（英语：）
* Kohana（英语：）
* Laravel
* Lithium（英语：）
* Midgard（英语：）
* MODX（英语：）
* Nette（英语：）
* Phalcon
* PRADO（英语：）
* Qcodo（英语：）
* Silex（英语：）
* SilverStripe
* Symfony
* TYPO3
* Xaraya（英语：）
* XOOPS
* Yii（英语：）
* Zend framework

 |
|  |
| Python | 
* BlueBream
* Bottle
* CherryPy
* Django
* Flask
* Grok（英语：）
* Nevow（英语：）
* Pyjs（英语：）
* Pylons
* Pyramid
* Quixote
* TACTIC
* Tornado
* TurboGears
* web2py
* Webware（英语：）
* Zope 2

 |
|  |
| Ruby | 
* Camping（英语：）
* Merb（英语：）
* Padrino（英语：）
* Ruby on Rails
* Sinatra（英语：）

 |
|  |
| Scala | 
* Lift
* Play
* Scalatra（英语：）

 |
|  |
| Smalltalk | 
* AIDA/Web（英语：）
* Seaside（英语：）

 |
|  |
| 其他语言 | 
* Application Express（英语：）（PL-SQL）
* Grails（英语：）（Groovy）
* Kepler（英语：）（Lua）
* OpenACS（英语：）（Tcl）
* Phoenix（英语：）（Elixir）
* SproutCore（英语：）（JavaScript-Ruby）
* Yaws（Erlang）

 |

 |