David Heinemeier Hansson extracted Ruby on Rails from his work on the project management tool Basecamp at the web application company 37signals.[8] Hansson first released Rails as open source in July 2004, but did not share commit rights to the project until February 2005. [citation needed] In August 2006, the framework reached a milestone when Apple announced that it would ship Ruby on Rails with Mac OS X v10.5 "Leopard",[9] which was released in October 2007.
Rails version 2.3 was released on 15 March 2009, with major new developments in templates, engines, Rack and nested model forms. Templates enable the developer to generate a skeleton application with custom gems 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.[10]
On 23 December 2008, Merb, 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.[11] Merb was merged with Rails as part of the Rails 3.0 release.[12][13]
Rails 3.1 was released on 31 August 2011, featuring Reversible Database Migrations, Asset Pipeline, Streaming, jQuery as default JavaScript library and newly introduced CoffeeScript and Sass into the stack.[14]
Rails 3.2 was released on 20 January 2012 with a faster development mode and routing engine (also known as Journey engine), Automatic Query Explain and Tagged Logging.[15] Rails 3.2.x is the last version that supports Ruby 1.8.7.[16] Rails 3.2.12 supports Ruby 2.0.[17]
Rails 4.0 was released on 25 June 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.[18]
Rails 4.1 was released on 8 April 2014, introducing Spring, Variants, Enums, Mailer previews, and secrets.yml.[19]
Rails 4.2 was released on 19 December 2014, introducing Active Job, asynchronous emails, Adequate Record, Web Console, and foreign keys.[20]
Rails 5.0 was released on 30 June 2016, introducing Action Cable, API mode, and Turbolinks 5.[21]
Rails 5.0.0.1 was released on 10 August 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 27 April 2017, introducing JavaScript integration changes (management of JavaScript dependencies from NPM via Yarn, optional compilation of JavaScript using Webpack, and a rewrite of Rails UJS to use vanilla JavaScript instead of depending on jQuery), system tests using Capybara, encrypted secrets, parameterized mailers, direct & resolved routes, and a unified form_with helper replacing the form_tag/form_for helpers.[22]
Rails 5.2 was released on 9 April 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.[23]
Rails 5.2.2 was released on 4 December 2018, introducing numerous bug fixes and several logic improvements.[24]
Rails 6.0 was released on 16 August 2019, making Webpack default, adding mailbox routing, a default online rich-text editor, parallel testing, multiple database support, mailer routing and a new autoloader.[25]
Rails 6.1 was released on 9 December 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.[26]
Rails 7.0 was released on 15 December 2021, replacing Node.js and Webpack 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.[27]
Rails 7.1 was released on 5 October 2023, Dockerfiles support using Kamal in order to deploy your application, authentication improvements, and now including support for bun.[28]
A revised maintenance policy[48] was instituted in October 2024.[49]
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 (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.[50]
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 at run-time. Alternatively, many other templating systems can be used for views.[citation needed]
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.[51] Also included are WEBrick, a simple Ruby web server that is distributed with Ruby, and Rake, a build system, distributed as a gem. Together with Ruby on Rails, these tools provide a basic development environment.[citation needed]
HTTP Servers
Ruby on Rails is most commonly not connected to the Internet directly, but through some front-end web server. Mongrel was generally preferred[by whom?] over WEBrick in the early days,[citation needed] but it can also run on Lighttpd, Apache, Cherokee, Hiawatha, Nginx (either as a module – Phusion Passenger for example – or via CGI, FastCGI or mod ruby), and many others. From 2008 onward, Passenger replaced Mongrel as the most-used web server for Ruby on Rails.[52] Ruby is also supported natively on IBM i.[53]
JavaScript
Ruby on Rails is also noteworthy for its extensive use of the JavaScript libraries Prototype and Script.aculo.us for scripting Ajax actions.[54] 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). As of version 7.0, new Ruby on Rails applications come with the Hotwire family of JavaScript libraries installed by default.
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 as standard CSS 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 1.5.2+; earlier versions are not supported.[55]
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 (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 to extend existing packages. Earlier Rails supported plugins within their own custom framework; version 3.2 deprecates these in favor of standard Ruby "gems".[56]
Deployment
Ruby on Rails is often installed using RubyGems, a package manager[57] 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.
Ruby on Rails is typically deployed with a database server such as MySQL or PostgreSQL, and a web server such as Apache running the Phusion Passenger module.
The Rails Doctrine is 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.[58]
"Don't repeat yourself" means that information is located in a single, unambiguous place. For example, using the ActiveRecord 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),[59][60]
Conceptual compression,[61][62] and robust security[63] mark Rails 7.0's approach to the One person framework.[a]
Trademarks
In March 2007, David Heinemeier Hansson applied to register three Ruby on Rails-related trademarks with the USPTO. These applications concern the phrase "RUBY ON RAILS",[65] the word "RAILS",[66] and the official Rails logo.[67] 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.[68][69] In response to this criticism, Hansson replied:
I only grant promotional use [of the Rails logo] 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.[68]
The trademark of the logo was cancelled on 25 October 2019.[67]
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.[70] These critics often mentioned various Twitter outages in 2007 and 2008, which spurred Twitter's partial transition to Scala (which runs on the Java Virtual Machine) for their queueing system and other middleware.[71][72] The user interface aspects of the site continued to run Ruby on Rails[73] until 2011 when it was replaced due to concerns over performance.[74] 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.[75]
In 2011, Gartner Research 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, GitHub, GitLab,[76]Scribd, Shopify, and Basecamp.[77] As of January 2016, it is estimated that more than 1.2 million web sites are running Ruby on Rails.[78][79]
Security
In March 2012, security researcher Egor Homakov discovered a mass assignment vulnerability that allowed certain Rails applications to be remotely exploited, and demonstrated it by non-maliciously hacking GitHub after his earlier attempts at responsible disclosure were dismissed.[80]
On 24 September 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.[81]
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 15 April 2016, Near reported that an analysis of 50 popular Web applications using Space uncovered 23 previously unknown security flaws.[82]
^"Rails 3.0: It's ready!". weblog.rubyonrails.org. 29 August 2010. Archived from the original on 31 August 2010. Retrieved 30 August 2010. Rails 3.0 has been designed to work with Ruby 1.8.7, Ruby 1.9.2, and JRuby 1.5.2+.
^"5 Question Interview with Twitter Developer Alex Payne". radicalbehavior.com. 29 March 2007. Archived from the original on 23 April 2009. Retrieved 4 November 2014. By various metrics Twitter is the biggest Rails site on the net right now. Running on Rails has forced us to deal with scaling issues - issues that any growing site eventually contends with – far sooner than I think we would on another framework.
^Steve Jenson; Alex Payne & Robey Pointer interview (3 April 2009). "Twitter on Scala". artima.com. Archived from the original on 19 June 2009. Retrieved 18 July 2009. We had a Ruby-based queuing system that we used for communicating between the Rails front ends and the daemons, and we ended up replacing that with one written in Scala. The Ruby one actually worked pretty decently in a normal steady state, but the startup time and the crash behavior were undesirable.
^"Twitter jilts Ruby for Scala". theregister.co.uk. 1 April 2009. Archived from the original on 12 August 2017. Retrieved 18 July 2009. By the end of this year, Payne said, Twitter hopes to have its entire middleware infrastructure and its APIs ported to the new language. Ruby will remain, but only on the front end. "We're still happy with Rails for building user facing features... performance-wise, it's fine for people clicking around web pages. It's the heavy lifting, asynchronous processing type of stuff that we've moved away from."
^Ryan King (25 September 2009). "Twitter on Ruby". Evan Weaver. Archived from the original on 27 September 2009. Retrieved 29 September 2009. We use Scala for a few things at Twitter, but the majority of the site is Ruby.
العلاقات الإيرانية الجامايكية إيران جامايكا إيران جامايكا تعديل مصدري - تعديل العلاقات الإيرانية الجامايكية هي العلاقات الثنائية التي تجمع بين إيران وجامايكا.[1][2][3][4][5] مقارنة بين البلدين هذه مقارنة عامة ومرجعية للدولتين: وجه المقار�...
село Білокузьминівка Герб Країна Україна Область Донецька область Район Краматорський район Громада Костянтинівська міська громада Облікова картка Білокузьминівка Основні дані Засноване 17 ст. Населення 689 Поштовий індекс 85130 Телефонний код +380 6272 Географічні да�...
Stadtpfarrkirche Perg (Februar 2009) Die römisch-katholische Stadtpfarrkirche Perg in Perg im oberösterreichischen Mühlviertel ist eine dreischiffige, gotische Hallenkirche, steht als einziges Gebäude auf dem verhältnismäßig großen Hauptplatz und ist dem Hl. Jakob geweiht. An Stelle einer nicht mehr nachweisbaren Holzkirche errichteten die Bürger von Perg 1416 eine Jakobskapelle aus Stein, die bereits einen Friedhof besaß. Um 1500 beziehungsweise 1528 wurde die Kapelle zur Jakobskir...
Hiệp hội bóng đá MaldivesAFCThành lập1982Trụ sởMaléGia nhập FIFA1986Gia nhập AFC1986Chủ tịchAbdul ShakoorWebsitehttp://www.famaldives.com Hiệp hội bóng đá Maldives (FAM) là tổ chức quản lý, điều hành các hoạt động bóng đá ở Maldives. FAM quản lý đội tuyển bóng đá quốc gia Maldives, tổ chức các giải bóng đá như giải vô địch bóng đá Maldives, cúp bóng đá Maldives, FAM là thành viên của cả Liên đo�...
Administrative entry restrictions Front cover of Uzbekistan international passport (started issuing January 1, 2019)Visa requirements for Uzbekistani citizens are administrative entry restrictions by the authorities of other states placed on citizens of Uzbekistan. The article is concerning ordinary passport holders and tourists. As of November 2023, 28 visa-free countries and 33 visa-on-arrival countries, as a result, ranking the Uzbekistan passport 83rd in terms of travel freedom according ...
село Мар'ївка Країна Україна Область Миколаївська область Район Вознесенський район Громада Прибузька сільська громада Основні дані Засноване 1946 Населення 349 Площа 0,825 км² Густота населення 423,03 осіб/км² Поштовий індекс 56419 Телефонний код +380 5152 Географічні дані Г
Artikel ini tidak memiliki referensi atau sumber tepercaya sehingga isinya tidak bisa dipastikan. Tolong bantu perbaiki artikel ini dengan menambahkan referensi yang layak. Tulisan tanpa sumber dapat dipertanyakan dan dihapus sewaktu-waktu.Cari sumber: Dirgantara Indonesia – berita · surat kabar · buku · cendekiawan · JSTOR PT Dirgantara IndonesiaKantor pusat PTDI di BandungSebelumnyaPT Industri Pesawat Terbang Nurtanio (1976-1985)PT Industri Pesawat T...
John FitzGeoffrey Escudo de armas de FitzGeoffrey:Cuartel, oro y gules, un borde vero[1]Información personalNombre en inglés John Fitzgeoffrey Nacimiento 1206 Shere (Reino Unido) Fallecimiento 23 de noviembre de 1258jul. FamiliaPadres Geoffrey Fitz Peter, I conde de Essex Aveline de Clare Cónyuge Isabel Bigod Información profesionalCargos ocupados Lord teniente de Irlanda [editar datos en Wikidata] John FitzGeoffrey, John Fitz Geoffrey o John fitz Geoffrey[2] (1205...
Severin Freund Severin Freund in Hinzenbach 2015 Nation Deutschland Deutschland Geburtstag 11. Mai 1988 (35 Jahre) Geburtsort Freyung, Deutschland Größe 185 cm Gewicht 67 kg Beruf Student Karriere Verein WSV-DJK Rastbüchl Trainer Christian LeitnerWerner Schuster (2008–2019)Stefan Horngacher (2019–2022) Nationalkader seit 2002 Pers. Bestweite 245 m (Vikersund 2015) Status zurückgetreten Karriereende 27. März 2022 Medaillenspiegel Olympische Medaillen 1 × 0 × 0 × WM-M...
العلاقات البرتغالية الوسط أفريقية البرتغال جمهورية أفريقيا الوسطى البرتغال جمهورية أفريقيا الوسطى تعديل مصدري - تعديل العلاقات البرتغالية الوسط أفريقية هي العلاقات الثنائية التي تجمع بين البرتغال وجمهورية أفريقيا الوسطى.[1][2][3][4][5] �...
Town in Saanen, Bern, Switzerland Municipality in Bern, SwitzerlandGstaadMunicipalityGstaad in 2011Location of Gstaad GstaadShow map of SwitzerlandGstaadShow map of Canton of BernCoordinates: 46°28′N 7°17′E / 46.467°N 7.283°E / 46.467; 7.283CountrySwitzerlandCantonBernDistrictObersimmental-SaanenMunicipalitySaanenElevation1,050 m (3,440 ft)Population (Dec 2009) • Total7,063Time zoneUTC+01:00 (Central European Time) • Summe...
Artikel ini tidak memiliki referensi atau sumber tepercaya sehingga isinya tidak bisa dipastikan. Tolong bantu perbaiki artikel ini dengan menambahkan referensi yang layak. Tulisan tanpa sumber dapat dipertanyakan dan dihapus sewaktu-waktu.Cari sumber: Heksadesimal – berita · surat kabar · buku · cendekiawan · JSTOR Sistem bilangan Hindu-Arab Arab barat Arab timur Bengali Gurmukhi India Sinhala Tamil Bali Burma Dzongkha Gujarati Jawa Khmer Lao Mongolia...
Representación de los compuestos químicos que se encuentran en el petróleo.Se entiende por química del petróleo a todo estudio teórico y experimental que tiene que ver con el petróleo, dando una explicación desde el punto de vista de la química. Es decir, a través de la química se explica desde su origen, procesos de explotación, transporte, almacenamiento, composición, procesamiento (refinación) y/o transformación. Esto incluye conceptos de química orgánica, química inorgá...
Place in Centre-Est Region, Burkina FasoTisselin-YarceCountry Burkina FasoRegionCentre-Est RegionProvinceBoulgou ProvinceDepartmentTenkodogo DepartmentPopulation (2005 est.) • Total167 Tisselin-Yarce is a village in the Tenkodogo Department of Boulgou Province in south-eastern Burkina Faso. As of 2005, the village has a population of 167.[1] References ^ Burkinabé government inforoute communale Archived 2008-10-11 at the Wayback Machine vte Boulgou ProvinceCapit...
This article needs additional citations for verification. Please help improve this article by adding citations to reliable sources. Unsourced material may be challenged and removed.Find sources: Citoyens au pouvoir du Québec – news · newspapers · books · scholar · JSTOR (November 2021) (Learn how and when to remove this template message) Political party in Canada Citoyens au pouvoir du Québec LeaderStéphane Lévesque (interim)Founded2011 (2...
Town in Massachusetts, United StatesSwansea, MassachusettsTownSwansea Town Hall FlagSealLocation in Bristol County in MassachusettsCoordinates: 41°44′53″N 71°11′25″W / 41.74806°N 71.19028°W / 41.74806; -71.19028CountryUnited StatesStateMassachusettsCountyBristolSettled1662IncorporatedMarch 5, 1667Government • TypeOpen town meetingArea • Total25.5 sq mi (66.1 km2) • Land23.1 sq mi (59.7 km2)...
Official Russian term for Erzya people and Mokshas For other uses, see Mordvins (disambiguation). Erzya and Moksha MordvinsМордовский народArchive photo 'We thank Comrade Stalin for our Mordvin Autonomy, 1950's[1]Total population806,000 (2010)Regions with significant populations Russia Mordovia 333,112744,237 (2010)[2]LanguagesPrimarily Russian, also Erzya, MokshaReligionMajority: Orthodox Christianity Minority: Mordvin Native Religion Molokans and Ju...
Willemstad Willemstad 12°06′00″N, 68°55′59″W Valtio Alankomaiden kuningaskunta Hallintoalue Curaçao Perustettu 1634 Väestö Väkiluku 135 000* [1] * arvio kaupunkialueen väestöstä [ Muokkaa Wikidatassa ] [ ohje ] Infobox OK Queen Emma -silta Willemstadissa Willemstadin sataman matkailualuetta Willemstad on Alankomaiden kuningaskuntaan kuuluvan Curaçaon autonomisen alueen pääkaupunki. Se oli aikaisemmin myös lokakuussa 2010 hajotetun Alankomaiden Antillien pä�...