Ruby on Rails (simplified as Rails) is a
server-side
In the client–server model, server-side refers to programs and operations that run on the server. This is in contrast to client-side programs and operations which run on the client.
General concepts
Typically, a server is a computer application ...
web application framework written in
Ruby
A ruby is a pinkish red to blood-red colored gemstone, a variety of the mineral corundum ( aluminium oxide). Ruby is one of the most popular traditional jewelry gems and is very durable. Other varieties of gem-quality corundum are called sa ...
under the
MIT License. Rails is a
model–view–controller
Model–view–controller (MVC) is a software architectural pattern commonly used for developing user interfaces that divide the related program logic into three interconnected elements. This is done to separate internal representations of infor ...
(MVC) framework, providing default structures for a
database
In computing, a database is an organized collection of data stored and accessed electronically. Small databases can be stored on a file system, while large databases are hosted on computer clusters or cloud storage. The design of databases sp ...
, a
web service, and
web pages. It encourages and facilitates the use of
web standards such as
JSON
JSON (JavaScript Object Notation, pronounced ; also ) is an open standard file format and data interchange format that uses human-readable text to store and transmit data objects consisting of attribute–value pairs and arrays (or other ser ...
or
XML
Extensible Markup Language (XML) is a markup language and file format for storing, transmitting, and reconstructing arbitrary data. It defines a set of rules for encoding documents in a format that is both human-readable and machine-readable. T ...
for data transfer and
HTML
The HyperText Markup Language or HTML is the standard markup language for documents designed to be displayed in a web browser. It can be assisted by technologies such as Cascading Style Sheets (CSS) and scripting languages such as JavaScri ...
,
CSS
Cascading Style Sheets (CSS) is a style sheet language used for describing the presentation of a document written in a markup language such as HTML or XML (including XML dialects such as SVG, MathML or XHTML). CSS is a cornerstone techno ...
and
JavaScript
JavaScript (), often abbreviated as JS, is a programming language that is one of the core technologies of the World Wide Web, alongside HTML and CSS. As of 2022, 98% of Website, websites use JavaScript on the Client (computing), client side ...
for user interfacing. In addition to MVC, Rails emphasizes the use of other well-known
software engineering
Software engineering is a systematic engineering approach to software development.
A software engineer is a person who applies the principles of software engineering to design, develop, maintain, test, and evaluate computer software. The term '' ...
patterns and paradigms, including
convention over configuration (CoC),
don't repeat yourself
"Don't repeat yourself" (DRY) is a principle of software development aimed at reducing repetition of software patterns, replacing it with abstractions or using data normalization to avoid redundancy.
The DRY principle is stated as "Every piece o ...
(DRY), and the
active record pattern In software engineering, the active record pattern is an architectural pattern. It is found in software that stores in-memory object data in relational databases. It was named by Martin Fowler in his 2003 book ''Patterns of Enterprise Application ...
.
Ruby on Rails' emergence in 2005 greatly influenced web app development, through innovative features such as seamless database
table
Table may refer to:
* Table (furniture), a piece of furniture with a flat surface and one or more legs
* Table (landform), a flat area of land
* Table (information), a data arrangement with rows and columns
* Table (database), how the table data ...
creations,
migrations, and
scaffolding of views to enable rapid application development. Ruby on Rails' influence on other web frameworks remains apparent today, with many frameworks in other languages borrowing its ideas, including
Django in
Python
Python may refer to:
Snakes
* Pythonidae, a family of nonvenomous snakes found in Africa, Asia, and Australia
** ''Python'' (genus), a genus of Pythonidae found in Africa and Asia
* Python (mythology), a mythical serpent
Computing
* Python (pro ...
;
Catalyst
Catalysis () is the process of increasing the rate of a chemical reaction by adding a substance known as a catalyst (). Catalysts are not consumed in the reaction and remain unchanged after it. If the reaction is rapid and the catalyst recyc ...
in
Perl
Perl is a family of two high-level, general-purpose, interpreted, dynamic programming languages. "Perl" refers to Perl 5, but from 2000 to 2019 it also referred to its redesigned "sister language", Perl 6, before the latter's name was offici ...
;
Laravel,
CakePHP and
Yii
Yii is an open source, object-oriented, component-based MVC PHP web application framework. Yii is pronounced as "Yee" or i:and in Chinese it means "simple and evolutionary" and it can be an acronym for "Yes It Is!".
History
Yii started ...
in
PHP
PHP is a general-purpose scripting language geared toward web development. It was originally created by Danish-Canadian programmer Rasmus Lerdorf in 1993 and released in 1995. The PHP reference implementation is now produced by The PHP Group ...
;
Grails in
Groovy
''Groovy'' (or, less commonly, ''groovie'' or ''groovey'') is a slang colloquialism popular during the 1950s, '60s and '70s. It is roughly synonymous with words such as "excellent", "fashionable", or "amazing", depending on context.
History
The ...
;
Phoenix in
Elixir;
Play in
Scala; and
Sails.js
Sails.js (or Sails) is a model–view–controller (MVC) web application framework developed atop the Node.js environment, released as free and open-source software under the MIT License. It is designed to make it easy to build custom, enterpris ...
in
Node.js
Node.js is an open-source server environment. Node.js is cross-platform and runs on Windows, Linux, Unix, and macOS. Node.js is a back-end JavaScript runtime environment. Node.js runs on the V8 JavaScript Engine and executes JavaScript code ou ...
.
Well-known sites that use Ruby on Rails include
Airbnb,
Bloomberg,
Crunchbase,
Dribbble,
indiexpo,
GitHub
GitHub, Inc. () is an Internet hosting service for software development and version control using Git. It provides the distributed version control of Git plus access control, bug tracking, software feature requests, task management, continuous ...
,
Twitch and
Shopify.
History
David Heinemeier Hansson
David Heinemeier Hansson is a Denmark, Danish programmer, and the creator of the popular Ruby on Rails web development Software framework, framework and the Instiki, Instiki wiki. He is also a partner at the web-based software development firm B ...
extracted Ruby on Rails from his work on the project management tool
Basecamp at the
web application
A web application (or web app) is application software that is accessed using a web browser. Web applications are delivered on the World Wide Web to users with an active network connection.
History
In earlier computing models like client-serve ...
company
37signals
37signals (formerly Basecamp before reverting to its original name) is an American web software company based in Chicago, Illinois. The firm was cofounded in 1999 by Jason Fried, Carlos Segura, and Ernest Kim as a web design company.
Since mid ...
.
Hansson first released Rails as open source in July 2004, but did not share
commit rights to the project until February 2005. In August 2006, the framework reached a milestone when
Apple
An apple is an edible fruit produced by an apple tree (''Malus domestica''). Apple fruit tree, trees are agriculture, cultivated worldwide and are the most widely grown species in the genus ''Malus''. The tree originated in Central Asia, wh ...
announced that it would ship Ruby on Rails with
Mac OS X v10.5 "Leopard", which was released in October 2007.
Rails version 2.3 was released on March 15, 2009, with major new developments in templates, engines,
Rack
Rack or racks may refer to:
Storage and installation
* Amp rack, short for amplifier rack, a piece of furniture in which amplifiers are mounted
* Bicycle rack, a frame for storing bicycles when not in use
* Bustle rack, a type of storage bin ...
and nested model forms. Templates enable the developer to generate a skeleton application with custom
gems
Gems, or gemstones, are polished, cut stones or minerals.
Gems or GEMS may also refer to:
Arts, entertainment and media
*Gems (Aerosmith album), ''Gems'' (Aerosmith album), 1988
*Gems (Patti LaBelle album), ''Gems'' (Patti LaBelle album), 1994
*G ...
and configurations. Engines give developers the ability to reuse application pieces complete with routes, view paths and models. The Rack web server interface and Metal allow one to write optimized pieces of code that route around Action Controller.
On December 23, 2008,
Merb
Merb is a discontinued model–view–controller web framework in Ruby, notable as a precursor to Rails 3. It brought increased focus on speed and modularity to Rails 3. The name Merb is a contraction of "Mongrel" and "Erb".
Precursor to and m ...
, another web application framework, was launched, and Ruby on Rails announced it would work with the Merb project to bring "the best ideas of Merb" into Rails 3, ending the "unnecessary duplication" across both communities.
Merb was merged with Rails as part of the Rails 3.0 release.
Rails 3.1 was released on August 31, 2011, featuring Reversible Database Migrations, Asset Pipeline, Streaming,
jQuery as default
JavaScript
JavaScript (), often abbreviated as JS, is a programming language that is one of the core technologies of the World Wide Web, alongside HTML and CSS. As of 2022, 98% of Website, websites use JavaScript on the Client (computing), client side ...
library and newly introduced
CoffeeScript and
Sass
Sass, Saß or SASS may refer to:
SASS
* M110 Semi-Automatic Sniper System (or M110 SASS)
* Safe Amplification Site Society, a non-profit organization that promotes music and the arts within Vancouver, British Columbia, Canada
* Shanghai Academ ...
into the stack.
Rails 3.2 was released on January 20, 2012 with a faster development mode and routing engine (also known as Journey engine), Automatic Query Explain and Tagged Logging.
Rails 3.2.x is the last version that supports Ruby 1.8.7.
Rails 3.2.12 supports Ruby 2.0.
Rails 4.0 was released on June 25, 2013, introducing Russian Doll Caching, Turbolinks, Live Streaming as well as making Active Resource, Active Record Observer and other components optional by splitting them as gems.
Rails 4.1 was released on April 8, 2014, introducing Spring, Variants, Enums, Mailer previews, and secrets.yml.
Rails 4.2 was released on December 19, 2014, introducing Active Job, asynchronous emails, Adequate Record, Web Console, and
foreign key A foreign key is a set of attributes in a table that refers to the primary key of another table. The foreign key links these two tables. Another way to put it: In the context of relational databases, a foreign key is a set of attributes subject to ...
s.
Rails 5.0 was released on June 30, 2016, introducing Action Cable, API mode, and Turbolinks 5.
Rails 5.0.0.1 was released on August 10, 2016, with Exclusive use of rails CLI over Rake and support for Ruby version 2.2.2 and above.
Rails 5.1 was released on April 27, 2017, introducing
JavaScript
JavaScript (), often abbreviated as JS, is a programming language that is one of the core technologies of the World Wide Web, alongside HTML and CSS. As of 2022, 98% of Website, websites use JavaScript on the Client (computing), client side ...
integration changes (management of JavaScript dependencies from NPM via Yarn, optional compilation of JavaScript using
Webpack
Webpack is a free and open-source module bundler for JavaScript. It is made primarily for JavaScript, but it can transform front-end assets such as HTML, CSS, and images if the corresponding loaders are included. Webpack takes modules with depen ...
, and a rewrite of Rails UJS to use vanilla JavaScript instead of depending on jQuery), system tests using
Capybara
The capybaraAlso called capivara (in Brazil), capiguara (in Bolivia), chigüire, chigüiro, or fercho (in Colombia and Venezuela), carpincho (in Argentina, Paraguay and Uruguay) and ronsoco (in Peru). or greater capybara (''Hydrochoerus hydro ...
, encrypted secrets, parameterized mailers, direct & resolved routes, and a unified form_with helper replacing the form_tag/form_for helpers.
Rails 5.2 was released on April 9, 2018, introducing new features that include ActiveStorage, built-in Redis Cache Store, updated Rails Credentials and a new DSL that allows for configuring a Content Security Policy for an application.
Rails 5.2.2 was released on December 4, 2018, introducing numerous bug fixes and several logic improvements.
Rails 6.0 was released on August 16, 2019, making
Webpack
Webpack is a free and open-source module bundler for JavaScript. It is made primarily for JavaScript, but it can transform front-end assets such as HTML, CSS, and images if the corresponding loaders are included. Webpack takes modules with depen ...
default, adding mailbox routing, a default
online rich-text editor, parallel testing, multiple database support, mailer routing and a new autoloader.
Rails 6.1 was released on December 9, 2020, adding per-database connection switching,
horizontal database sharding, eager loading of all associations, Delegated Types as an alternative to single-table inheritance, asynchronous deletion of associations, error objects, and other improvements and bug fixes.
Rails 7.0 was released on December 15, 2021, replacing
Node.js
Node.js is an open-source server environment. Node.js is cross-platform and runs on Windows, Linux, Unix, and macOS. Node.js is a back-end JavaScript runtime environment. Node.js runs on the V8 JavaScript Engine and executes JavaScript code ou ...
and
Webpack
Webpack is a free and open-source module bundler for JavaScript. It is made primarily for JavaScript, but it can transform front-end assets such as HTML, CSS, and images if the corresponding loaders are included. Webpack takes modules with depen ...
with import maps for JavaScript management by default, replacing Turbolinks with a combination of Turbo and Stimulus, adding at-work encryption into Active Record, using Zeitwerk exclusively for code loading, and more.
Technical overview
Ruby on Rails evolves radically from release to release exploring the use of new technologies and adopting new standards on the Internet. Some features are very stable in Ruby on Rails while some are replaced in favour of new techniques.
Model-View-Controller pattern
The
model–view–controller
Model–view–controller (MVC) is a software architectural pattern commonly used for developing user interfaces that divide the related program logic into three interconnected elements. This is done to separate internal representations of infor ...
(MVC) pattern is the fundamental structure to organize application programming.
In a default configuration, a ''model'' in the Ruby on Rails framework maps to a table in a database and to a Ruby file. For example, a model class ''User'' will usually be defined in the file 'user.rb' in the app/models directory, and linked to the table 'users' in the database. While developers are free to ignore this convention and choose differing names for their models, files, and database table, this is not common practice and is usually discouraged in accordance with the "
convention-over-configuration" philosophy.
A ''controller'' is a server-side component of Rails that responds to external requests from the web server to the application, by determining which view file to render. The controller may also have to query one or more models for information and pass these on to the view. For example, in an airline reservation system, a controller implementing a flight-search function would need to query a model representing individual flights to find flights matching the search, and might also need to query models representing airports and airlines to find related secondary data. The controller might then pass some subset of the flight data to the corresponding view, which would contain a mixture of static HTML and logic that use the flight data to create an HTML document containing a table with one row per flight. A controller may provide one or more actions. In Ruby on Rails, an action is typically a basic unit that describes how to respond to a specific external web-browser request. Also, note that the controller/action will be accessible for external web requests only if a corresponding route is mapped to it. Rails encourages developers to use
RESTful routes, which include actions such as create, new, edit, update, destroy, show, and index. These mappings of incoming requests/routes to controller actions can be easily set up in the routes.rb configuration file.
A ''view'' in the default configuration of Rails is an
erb file, which is evaluated and converted to
HTML
The HyperText Markup Language or HTML is the standard markup language for documents designed to be displayed in a web browser. It can be assisted by technologies such as Cascading Style Sheets (CSS) and scripting languages such as JavaScri ...
at run-time. Alternatively, many other templating systems can be used for views.
Ruby on Rails includes tools that make common development tasks easier "out-of-the-box", such as
scaffolding that can automatically construct some of the models and views needed for a basic
website
A website (also written as a web site) is a collection of web pages and related content that is identified by a common domain name and published on at least one web server. Examples of notable websites are Google Search, Google, Facebook, Amaz ...
. Also included are
WEBrick
WEBrick is a Ruby library providing simple HTTP web servers. It uses basic access authentication and digest access authentication for different kinds of servers that it can create - HTTP based server, HTTPS server, proxy server and virtual-host s ...
, a simple Ruby web server that is distributed with Ruby, and
Rake
Rake may refer to:
* Rake (stock character), a man habituated to immoral conduct
* Rake (theatre), the artificial slope of a theatre stage
Science and technology
* Rake receiver, a radio receiver
* Rake (geology), the angle between a feature on a ...
, a build system, distributed as a
gem
A gemstone (also called a fine gem, jewel, precious stone, or semiprecious stone) is a piece of mineral crystal which, in cut and polished form, is used to make jewelry or other adornments. However, certain rocks (such as lapis lazuli, opal, a ...
. Together with Ruby on Rails, these tools provide a basic development environment.
HTTP Servers
Ruby on Rails is most commonly not connected to the Internet directly, but through some front-end
web server
A web server is computer software and underlying hardware that accepts requests via HTTP (the network protocol created to distribute web content) or its secure variant HTTPS. A user agent, commonly a web browser or web crawler, initiate ...
.
Mongrel was generally preferred over WEBrick in the early days, but it can also run on
Lighttpd,
Apache
The Apache () are a group of culturally related Native American tribes in the Southwestern United States, which include the Chiricahua, Jicarilla, Lipan, Mescalero, Mimbreño, Ndendahe (Bedonkohe or Mogollon and Nednhi or Carrizaleño an ...
,
Cherokee
The Cherokee (; chr, ᎠᏂᏴᏫᏯᎢ, translit=Aniyvwiyaʔi or Anigiduwagi, or chr, ᏣᎳᎩ, links=no, translit=Tsalagi) are one of the indigenous peoples of the Southeastern Woodlands of the United States. Prior to the 18th century, t ...
,
Hiawatha,
Nginx
Nginx (pronounced "engine x" ) is a web server that can also be used as a reverse proxy, load balancer, mail proxy and HTTP cache. The software was created by Igor Sysoev and publicly released in 2004. Nginx is free and open-source software ...
(either as a module –
Phusion Passenger
Phusion Passenger (informally also known as mod_rails and mod_rack among the Ruby community) is a free web server and application server with support for Ruby, Python and Node.js. It is designed to integrate into the Apache HTTP Server or the ngin ...
for example – or via
CGI,
FastCGI
FastCGI is a binary protocol
A communication protocol is a system of rules that allows two or more entities of a communications system to transmit information via any kind of variation of a physical quantity. The protocol defines the rules, s ...
or
mod ruby
mod_ruby is a module that embeds the Ruby interpreter into the Apache web server to allow Ruby code to execute natively, faster than other CGI methods. Its drawback is that the characteristic sharing of classes among Apache processes is not ...
), and many others. From 2008 onward, Passenger replaced Mongrel as the most-used web server for Ruby on Rails. Ruby is also supported natively on
IBM i
IBM i (the ''i'' standing for ''integrated'') is an operating system developed by IBM for IBM Power Systems. It was originally released in 1988 as OS/400, as the sole operating system of the IBM AS/400 line of systems. It was renamed to i5/OS in ...
.
JavaScript
Ruby on Rails is also noteworthy for its extensive use of the
JavaScript
JavaScript (), often abbreviated as JS, is a programming language that is one of the core technologies of the World Wide Web, alongside HTML and CSS. As of 2022, 98% of Website, websites use JavaScript on the Client (computing), client side ...
libraries
Prototype
A prototype is an early sample, model, or release of a product built to test a concept or process. It is a term used in a variety of contexts, including semantics, design, electronics, and Software prototyping, software programming. A prototyp ...
and
Script.aculo.us
The Prototype JavaScript Framework is a JavaScript framework created by Sam Stephenson in February 2005 as part of Ajax support in Ruby on Rails. It is implemented as a single file of JavaScript code, usually named prototype.js. Prototype is dis ...
for scripting
Ajax actions. Ruby on Rails initially utilized lightweight
SOAP
Soap is a salt of a fatty acid used in a variety of cleansing and lubricating products. In a domestic setting, soaps are surfactants usually used for washing, bathing, and other types of housekeeping. In industrial settings, soaps are use ...
for web services; this was later replaced by RESTful
web services. Ruby on Rails 3.0 separates the markup of the page (which defines the structure of the page) from scripting (which determines functionality or logic of the page). jQuery is fully supported as a replacement for Prototype and is the default JavaScript library in Rails 3.1, reflecting an industry-wide move towards jQuery. Additionally,
CoffeeScript was introduced in Rails 3.1 as the default JavaScript language.
Web Services
Since version 2.0, Ruby on Rails offers both HTML and XML as standard output formats. The latter is the facility for RESTful web services.
CSS
Rails 3.1 introduced
Sass
Sass, Saß or SASS may refer to:
SASS
* M110 Semi-Automatic Sniper System (or M110 SASS)
* Safe Amplification Site Society, a non-profit organization that promotes music and the arts within Vancouver, British Columbia, Canada
* Shanghai Academ ...
as standard
CSS
Cascading Style Sheets (CSS) is a style sheet language used for describing the presentation of a document written in a markup language such as HTML or XML (including XML dialects such as SVG, MathML or XHTML). CSS is a cornerstone techno ...
templating.
Template
By default, the server uses
Embedded Ruby in the HTML views, with files having an html.erb extension. Rails supports swapping-in alternative templating languages, such as
HAML and
Mustache.
Ruby versions
Ruby on Rails 3.0 has been designed to work with Ruby 1.8.7, Ruby 1.9.2, and
JRuby
JRuby is an implementation of the Ruby programming language atop the Java Virtual Machine, written largely in Java. It is free software released under a three-way EPL/GPL/LGPL license. JRuby is tightly integrated with Java to allow the embedding ...
1.5.2+; earlier versions are not supported.
Ruby on Rails 3.2 is the last series of releases that support Ruby 1.8.7.
Framework structure
Ruby on Rails is separated into various packages, namely
ActiveRecord In software engineering, the active record pattern is an architectural pattern. It is found in software that stores in-memory object data in relational databases. It was named by Martin Fowler in his 2003 book ''Patterns of Enterprise Application A ...
(an
object-relational mapping system for database access), Action Pack, Active Support and Action Mailer. Prior to version 2.0, Ruby on Rails also included the Action Web Service package that is now replaced by Active Resource. Apart from standard packages, developers can make
plugins
Plug-in, plug in or plugin may refer to:
* Plug-in (computing) is a software component that adds a specific feature to an existing computer program.
** Audio plug-in, adds audio signal processing features
** Photoshop plugin, a piece of software t ...
to extend existing packages. Earlier Rails supported plugins within their own custom framework; version 3.2 deprecates these in favor of standard Ruby "gems".
Deployment
Ruby on Rails is often installed using
RubyGems
RubyGems is a package manager for the Ruby programming language that provides a standard format for distributing Ruby programs and libraries (in a self-contained format called a "gem"), a tool designed to easily manage the installation of gems ...
, a package manager which is included with current versions of Ruby. Many free
Unix-like systems also support installation of Ruby on Rails and its dependencies through their native
package management system
A package manager or package-management system is a collection of software tools that automates the process of installing, upgrading, configuring, and removing computer programs for a computer in a consistent manner.
A package manager deals w ...
.
Ruby on Rails is typically deployed with a database server such as
MySQL
MySQL () is an open-source relational database management system (RDBMS). Its name is a combination of "My", the name of co-founder Michael Widenius's daughter My, and "SQL", the acronym for Structured Query Language. A relational database o ...
or
PostgreSQL
PostgreSQL (, ), also known as Postgres, is a free and open-source relational database management system (RDBMS) emphasizing extensibility and SQL compliance. It was originally named POSTGRES, referring to its origins as a successor to the In ...
, and a web server such as
Apache
The Apache () are a group of culturally related Native American tribes in the Southwestern United States, which include the Chiricahua, Jicarilla, Lipan, Mescalero, Mimbreño, Ndendahe (Bedonkohe or Mogollon and Nednhi or Carrizaleño an ...
running the
Phusion Passenger
Phusion Passenger (informally also known as mod_rails and mod_rack among the Ruby community) is a free web server and application server with support for Ruby, Python and Node.js. It is designed to integrate into the Apache HTTP Server or the ngin ...
module.
Philosophy and design
Ruby on Rails is intended to emphasize ''
Convention over Configuration'' (CoC), and the ''
Don't Repeat Yourself
"Don't repeat yourself" (DRY) is a principle of software development aimed at reducing repetition of software patterns, replacing it with abstractions or using data normalization to avoid redundancy.
The DRY principle is stated as "Every piece o ...
'' (DRY) principle.
The Rails Doctrineis an enduring enabler that guides the philosophy, design, and implementation of the Ruby on Rails framework.
"Convention over Configuration" means a developer only needs to specify unconventional aspects of the application. For example, if there is a class ''Sale'' in the model, the corresponding table in the database is called ''sales'' by default. It is only if one deviates from this convention, such as calling the table "products sold", that the developer needs to write code regarding these names. Generally, Ruby on Rails conventions lead to less code and less repetition.
"Don't repeat yourself" means that information is located in a single, unambiguous place. For example, using the
ActiveRecord In software engineering, the active record pattern is an architectural pattern. It is found in software that stores in-memory object data in relational databases. It was named by Martin Fowler in his 2003 book ''Patterns of Enterprise Application A ...
module of Rails, the developer does not need to specify database column names in class definitions. Instead, Ruby on Rails can retrieve this information from the database based on the class name.
"Fat models, skinny controllers" means that most of the application logic should be placed within the model while leaving the controller as light as possible.
HTML Over The Wire (Hotwire),
[ David Heinemeier Hansson]
(7 Dec 2021) The time is right for Hotwire
/ref>[ David Heinemeier Hansson]
(September 6, 2021) Rails 7 will have three great answers to JavaScript in 2021+
/ref>
Conceptual compression,[ David Heinemeier Hansso]
(19 April 2018) Conceptual compression means beginners don’t need to know SQL — hallelujah!
/ref>[ David Heinemeier Hansso]
(May 15, 2018) RailsConf 2018: Opening Keynote: FIXME by David Heinemeier Hansson
Conceptual compression and robust security[David Heinemeier Hansson]
(31 Aug 2020) Serious security
/ref> mark Rails 7.0's approach to the One person framework.
Trademarks
In March 2007, David Heinemeier Hansson
David Heinemeier Hansson is a Denmark, Danish programmer, and the creator of the popular Ruby on Rails web development Software framework, framework and the Instiki, Instiki wiki. He is also a partner at the web-based software development firm B ...
applied to register three Ruby on Rails-related trademarks with the USPTO. These applications concern the phrase "RUBY ON RAILS", the word "RAILS", and the official Rails logo. In the summer of 2007, Hansson denied the publisher Apress permission to use the Ruby on Rails logo on the cover of a new Ruby on Rails book written by some authoritative community members. The episode gave rise to a polite protest in the Ruby on Rails community. In response to this criticism, Hansson replied:
I only grant promotional use f the Rails logo
F, or f, is the sixth letter in the Latin alphabet, used in the modern English alphabet, the alphabets of other western European languages and others worldwide. Its name in English is ''ef'' (pronounced ), and the plural is ''efs''.
Hist ...
for products I'm directly involved with. Such as books that I've been part of the development process for or conferences where I have a say in the execution. I would most definitely seek to enforce all the trademarks of Rails.
The trademark of the logo was cancelled on October 25, 2019.
Reception
Scalability
In earlier days, Rails running on Matz's Ruby Interpreter (the ''de facto'' reference interpreter for Ruby) had been criticized for issues with scalability. These critics often mentioned various Twitter
Twitter is an online social media and social networking service owned and operated by American company Twitter, Inc., on which users post and interact with 280-character-long messages known as "tweets". Registered users can post, like, and ...
outages in 2007 and 2008, which spurred Twitter's partial transition to Scala (which runs on the Java Virtual Machine
A Java virtual machine (JVM) is a virtual machine that enables a computer to run Java programs as well as programs written in other languages that are also compiled to Java bytecode. The JVM is detailed by a specification that formally describes ...
) for their queueing system and other middleware
Middleware is a type of computer software that provides services to software applications beyond those available from the operating system. It can be described as "software glue".
Middleware makes it easier for software developers to implement co ...
. The user interface aspects of the site continued to run Ruby on Rails until 2011 when it was replaced due to concerns over performance. On the other hand, many Rails business application developers relied on system architecture design, including choices of database engine, cache configuration, and servers, to tackle scalability issues. The original author of Rails, David Heinemeier Hansson, criticized Twitter, saying that their problems scaling were the consequences of their own poor architectural decisions and not the fault of Rails. According to Hansson, blaming Rails for their troubles while making no contributions to the framework is ungrateful and unjust.
In 2011, Gartner Research
Gartner, Inc is a technological research and consulting firm based in Stamford, Connecticut that conducts research on technology and shares this research both through private consulting as well as executive programs and conferences. Its clients ...
noted that despite criticisms and comparisons to Java, many high-profile consumer web firms are using Ruby on Rails to build scalable web applications. Some of the largest sites running Ruby on Rails include Airbnb, Cookpad
Cookpad Inc. (TYO: 2193) is a food tech company. The company operates "Cookpad" which is Japan’s largest recipe sharing service, with 60 million monthly unique users in Japan and 40 million monthly unique users globally, allowing visitors to up ...
, GitHub
GitHub, Inc. () is an Internet hosting service for software development and version control using Git. It provides the distributed version control of Git plus access control, bug tracking, software feature requests, task management, continuous ...
, GitLab
GitLab Inc. is an open-core company that operates GitLab, a DevOps software package which can develop, secure, and operate software. The open source software project was created by Ukrainian developer Dmitriy Zaporozhets and Dutch developer S ...
, Scribd, Shopify, and Basecamp. As of January 2016, it is estimated that more than 1.2 million web sites are running Ruby on Rails.
Security
In March 2012, security researcher Egor Homakov discovered a mass assignment vulnerability
Mass assignment is a computer vulnerability where an active record pattern in a web application is abused to modify data items that the user should not normally be allowed to access such as password, granted permissions, or administrator status.
...
that allowed certain Rails applications to be remotely exploited, and demonstrated it by non-maliciously hacking GitHub
GitHub, Inc. () is an Internet hosting service for software development and version control using Git. It provides the distributed version control of Git plus access control, bug tracking, software feature requests, task management, continuous ...
after his earlier attempts at responsible disclosure were dismissed.
On September 24, 2013, a session cookie persistence security flaw was reported in Ruby on Rails. In a default configuration, the entire session hash is stored within a session cookie known as ''CookieStore'', allowing any authenticated session possessing the session cookie to log in as the target user at any time in the future. As a workaround, administrators are advised to configure cookies to be stored on the server using mechanisms such as ''ActiveRecordStore''.
Researchers Daniel Jackson and Joseph Near developed a data debugger they called "Space" that can analyze the data access of a Rails program and determine if the program properly adheres to rules regarding access restrictions. On April 15, 2016, Near reported that an analysis of 50 popular Web applications using Space uncovered 23 previously unknown security flaws.
Notes
References
Bibliography
*
*
*
*
*
*
*
External links
*
Rails source code
Rails guides
Rails API
{{DEFAULTSORT:Ruby On Rails
2004 software
Free computer libraries
Free software programmed in Ruby
Software using the MIT license
Web 2.0
Web frameworks