Ruby on Rails

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
- X
- 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 中国社区
- 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

## 基本资料

- 开发者： Rails核心团队
- 发行日期：2005年12月13日
- 操作系统：跨平台
- 状态：活跃
- 语言：Ruby
- 类型：Web应用框架
- 许可协议：MIT许可证