Ruby on Rails

Ruby on Rails
開發者Rails核心团队
首次发布2005年12月13日,​18年前​(2005-12-13[1]
当前版本
  • 7.1.3.2 (2024年2月21日;穩定版本)[2]
編輯維基數據鏈接
源代码库
  • github.com/rails/rails
編輯維基數據鏈接
操作系统跨平台
语言Ruby
类型Web应用框架
许可协议MIT许可证
网站rubyonrails.org 编辑维基数据

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的网站有:[3]

  • 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的HTMLXMLJavaScript模板。

控制器

控制器将用户界面和数据模型关联起来,并充当协调运作的角色。它接收各种用户操作,更新数据模型,并用合适的view展示结果给用户。像他的名字一样,可以说应用的主要控制中心就是各个控制器。

Rails的组成模块

模型:Active Record

ActiveRecord实现了Rails的对象关系映射

控制器和视图:ActionPack

ActionController是Rails中的控制器,提供各种方法供用户操作使用。

ActionView是Rails中的视图,负责展现用户界面。

常用实用工具:ActiveSupport

ActiveSupport包提供一些工具和支持代码。

处理邮件:ActionMailer

ActionMailer用来发送和接收email

Web服务:ActionWebService

ActionWebService来提供SOAPXML-RPC支持。需要注意的是,Rails趋向使用更加简单明瞭的REST方式web服务而不再提倡SOAP格式的web服务。ActionWebServices在未来的版本裡面会逐步淡出。

网络资源:ActiveResource

用REST对Web服务提供了优秀的支持。这种风格的Web服务使用指定的资源。

Rails中的AJAX

AJAX(非同步JavaScript與XML)是一種非同步傳輸介面,可以藉由浏览器使用JavaScriptXML或其他数据格式来處理傳輸請求,而将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中,常被用来作为应用服务器。而对于生产应用,常推荐使用带FastCGIApache或者Lighttpd,但任何支持CGI或者FastCGI的網頁伺服器都可以使用。在Apache上,mod_ruby也可以考虑用来提高性能。

數據庫支持

使用Rails的架構開發網絡應用一般都使用數據庫,所以推薦使用一個關聯式資料庫系統來進行數據存儲,若不能運行一個關聯式資料庫服務器,Rails支持嵌入式數據庫SQLite。Rails還支持關聯式資料庫系統,包括MySQLPostgreSQLIBM DB2OracleSQL Server

系统要求

集成开发环境

开发用的IDE有:EclipseMyEclipseNetBeans,RubyMine,Aptana,Sublime TextVisual Studio Code

类似的框架

PHP 語言

Python語言

Perl語言

Elixir語言

  • Phoenix Framework

Node.js環境

  • Sails.js

参考文献

  1. ^ David. Rails 1.0: Party like it's one oh oh!. Ruby on Rails. [2017-03-01]. (原始内容存档于2015-12-17). 
  2. ^ 2.0 2.1 Release 7.1.3.2. 2024年2月21日 [2024年3月25日]. 
  3. ^ 存档副本. [2020-09-26]. (原始内容存档于2020-09-22). 

外部链接

官方網站

  • (英文)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论坛
C++
  • CppCMS英语CppCMS
  • Wt英语Wt (web toolkit)
CLI
  • ASP.NET
    • Core
    • AJAX
    • 动态数据英语ASP.NET Dynamic Data
    • MVC
    • Razor英语ASP.NET Razor
    • Web Forms
  • DNN英语DotNetNuke
  • BFC英语Base One Foundation Component Library
  • MonoRail英语MonoRail (software)
  • OpenRasta英语OpenRasta
  • Umbraco
ColdFusion
  • CFWheels
  • ColdBox Platform英语ColdBox Platform
  • ColdSpring英语ColdSpring Framework
  • Fusebox英语Fusebox (programming)
  • Mach-II英语Mach-II
  • Model-Glue英语Model-Glue
Common Lisp
  • Caveman2英语Caveman2
  • CL-HTTP英语CL-HTTP
  • UnCommon Web英语UnCommon Web
  • Weblocks
D
  • Vibe.d英语Vibe.d
Haskell
  • Happstack英语Happstack
  • Yesod英语Yesod (web framework)
  • Snap英语Snap (web framework)
Java
  • AppFuse英语AppFuse
  • Flexive英语Flexive
  • Grails英语Grails (framework)
  • GWT
  • ICEfaces英语ICEfaces
  • ItsNat英语ItsNat
  • JavaServer Faces
  • JHipster英语JHipster
  • Jspx英语Jspx-bay
  • JWt英语JWt (Java web toolkit)
  • OpenXava英语OpenXava
  • Play
  • Reasonable Server Faces英语Reasonable Server Faces
  • Remote Application Platform英语Remote Application Platform
  • RIFE英语RIFE
  • Seam英语JBoss Seam
  • Spring
  • Stripes英语Stripes (framework)
  • Struts
  • Tapestry
  • Vaadin英语Vaadin
  • Vert.x
  • WebWork英语WebWork
  • Wicket
  • WaveMaker英语WaveMaker
  • ZK
JavaScript
  • Ample SDK英语Ample SDK
  • Angular英语Angular (application platform)/AngularJS
  • Backbone.js
  • Chaplin.js英语Chaplin.js
  • Closure英语Google Closure Tools
  • Dojo Toolkit
  • Ember.js
  • Extjs
  • JQuery
  • Meteor英语Meteor (web framework)
  • MooTools英语MooTools
  • Node.js
  • Prototype
  • React
  • Rico
  • script.aculo.us英语script.aculo.us
  • Sencha Touch英语Sencha Touch
  • SproutCore英语SproutCore
  • Vue.js
  • Wakanda英语Wakanda (software)
Perl
  • Catalyst
  • Dancer英语Dancer (software)
  • Mason英语Mason (Perl)
  • Maypole
  • Mojolicious英语Mojolicious
  • WebGUI
PHP
  • CakePHP英语CakePHP
  • CodeIgniter
  • Fat-Free
  • FuelPHP
  • Gyroscope英语Gyroscope (software)
  • Horde英语Horde (software)
  • Kohana英语Kohana (framework)
  • Laravel
  • Lithium英语Lithium (software)
  • Midgard英语Midgard (software)
  • MODX英语MODX
  • Nette英语Nette Framework
  • Phalcon
  • PRADO英语PRADO (framework)
  • Qcodo英语Qcodo
  • Silex英语Silex (web framework)
  • SilverStripe
  • Symfony
  • TYPO3
  • Xaraya英语Xaraya
  • XOOPS
  • Yii英语Yii
  • Zend framework
Python
Ruby
  • Camping英语Camping (microframework)
  • Merb英语Merb
  • Padrino英语Padrino (web framework)
  • Ruby on Rails
  • Sinatra英语Sinatra (software)
Rust
  • Yew
Scala
  • Lift
  • Play
  • Scalatra英语Scalatra
Smalltalk
  • AIDA/Web英语AIDA/Web
  • Seaside英语Seaside (software)
其他语言
  • Application Express英语Oracle Application ExpressPL-SQL
  • Grails英语Grails (framework)Groovy
  • Kepler英语Kepler (software)Lua
  • OpenACS英语OpenACSTcl
  • Phoenix英语Phoenix (web framework)Elixir
  • SproutCore英语SproutCoreJavaScript-Ruby
  • YawsErlang