Ruby on Rails
| Ruby on Rails | |
|---|---|
| | |
| Тип | веб-фреймворк |
| Автор | Давид Хейнемейер Ханссон |
| Разработчик | Давид Хейнемейер Ханссон |
| Написана на | Ruby[2][3] |
| Операционная система | Unix-подобная операционная система |
| Дата выпуска | 13 декабря 2005 |
| Последняя версия |
|
| Репозиторий | github.com/rails/rails |
| Лицензия | лицензия MIT[4] |
| Сайт | rubyonrails.org (англ.) |
Ruby on Rails (RoR) — фреймворк, написанный на языке программирования Ruby, реализует архитектурный шаблон Model-View-Controller для веб-приложений, а также обеспечивает их интеграцию с веб-сервером и сервером баз данных. Является открытым программным обеспечением и распространяется под лицензией MIT.
Создан Давидом Хейнемейером Ханссоном на основе его работы в компании 37signals над средством управления проектами Basecamp и выпущен в июле 2004 года. 23 декабря 2008 года команда проекта Merb объединилась с командой Rails с целью создания следующей версии Rails 3, которая объединит в себе лучшие черты обоих фреймворков.
Базируется на следующих принципах разработки приложений:
- максимальное использование механизмов повторного использования, позволяющих минимизировать дублирование кода в приложениях (принцип Don’t repeat yourself);
- по умолчанию используются соглашения по конфигурации, типичные для большинства приложений (принцип Convention over configuration) — явная спецификация конфигурации требуется только в нестандартных случаях.
Архитектура
[править | править код]
Основными компонентами приложений на Ruby on Rails являются модель (англ. model), представление (англ. view) и контроллер (англ. controller). Ruby on Rails использует REST-стиль построения веб-приложений.
Модель предоставляет остальным компонентам приложения объектно-ориентированное отображение данных (таких как каталог продуктов или список заказов). Объекты модели могут осуществлять загрузку и сохранение данных в реляционной базе данных, а также реализуют бизнес-логику.
Для хранения объектов модели в реляционной СУБД по умолчанию в Rails 3 использована библиотека ActiveRecord. Конкурирующий аналог — DataMapper. Существуют плагины для работы с нереляционными базами данных, например Mongoid для работы с MongoDB.
Представление создаёт пользовательский интерфейс с использованием полученных от контроллера данных. Представление также передает запросы пользователя на манипуляцию данными в контроллер (как правило, представление не изменяет непосредственно модель).
В Ruby on Rails представление описывается при помощи шаблонов ERB — файлов HTML с дополнительными включениями фрагментов кода Ruby (Embedded Ruby, или ERb). Вывод, сгенерированный встроенным кодом Ruby, включается в текст шаблона, после чего получившаяся страница HTML возвращается пользователю. Кроме ERB возможно использовать ещё около 20 шаблонизаторов, в том числе Haml.
Контроллер в Rails — это набор логики, запускаемой после получения HTTP-запроса сервером. Контроллер отвечает за вызов методов модели и запускает формирование представления.
Соответствие интернет-адреса с действием контроллера (маршрут) задается в файле config/routes.rb.
Контроллером в Ruby on Rails является класс, наследованный от ActionController::Base для классических приложений и ActionController::API для API[5]. Открытые методы контроллера являются так называемыми действиями (англ. actions). Действия часто соответствует отдельному представлению. Например, по запросу пользователя admin/index будет вызван метод index класса AdminController и затем использовано представление index.html.erb из каталога views/admin.
Интеграция
[править | править код]Предпочтительным методом интеграции с веб-серверами является проксирование — использование веб-сервера в качестве прокси-сервера перед сервером приложения. Особняком стоят модули Phusion Passenger для интеграции с серверами Apache и nginx.
Ruby on Rails использует интерфейс Rack, что позволяет использовать менее распространённые механизмы (FCGI, CGI, SCGI). Ruby on Rails может работать с Apache, Lighttpd или любым другим веб-сервером, поддерживающим FastCGI. Для разработки и отладки используется веб-сервер Puma (ранее WEBrick, встроенный в Ruby, или Mongrel). В качестве сервера базы данных поддерживаются MySQL, PostgreSQL, Firebird, DB2, Oracle и Microsoft SQL Server. Также поддерживается встраиваемая база данных SQLite.
Для Windows существует дистрибутив Instant Rails с настроенной и готовой к работе сразу после установки рабочей средой для разработки Rails-приложений, которая включает в себя сервер Apache и СУБД MySQL, а также дистрибутив RubyInstaller, включающий последние версии Ruby и инструменты разработчика. Для платформ Windows, Linux, macOS имеется комплексный установщик BitNami RubyStack[6], включающий в себя все необходимое для разработки в среде Rails, включая Ruby, RubyGems, Ruby on Rails, MySQL, Apache, Mongrel и Subversion.
Помимо этого сайты BitNami.org и JumpBox.com[7] бесплатно предлагают образы VMware с готовой Linux-средой для развертывания RoR-приложений. Эти образы можно подключить к своему серверу виртуальных машин или развернуть в предлагаемой облачной среде.
Для разработки AJAX-приложений в RoR (до версии 5.1) по умолчанию использовался javascript-фреймворк jQuery, однако вместо него можно использовать и другие библиотеки. В ранних версиях Ruby on Rails (до 3.1), js-фреймворком по умолчанию был Prototype.
Подключаемые библиотеки
[править | править код]В качестве репозитория плагинов Ruby on Rails использует экосистему пакетов RubyGems, которые также называются «джемы» (gem с англ. — «самоцвет»). Некоторые плагины со временем были включены в базовую поставку Rails, например Sass и CoffeeScript; другие же, хотя и не были включены в базовую поставку, являются стандартом де-факто для большинства разработчиков (например, средство модульного тестирования RSpec).
Начиная с 3-й версии Rails наблюдается тенденция вынесения части функциональных возможностей в отдельные «джемы», отчасти из-за их более быстрого развития, чем самого Rails, отчасти для облегчения фреймворка.
Некоторые джемы:
- Devise (для аутентификации)
- CanCanCan (для авторизации)
- Pundit (для авторизации, пришел на смену CanCanCan, как модернизированная альтернатива)
- Kaminari, Will paginate, Pagy (для разделения записей, извлекаемых из базы данных, или элементов массива по страницам)
- Faker (для случайной генерации тестовых наборов данных в веб-приложениях)
- Friendly_id (позволяет создавать человекопонятные веб-адреса)
- Active Admin (для создания панелей администрирования)
- CommunityEngine[8] (для создания социальных сетей).
Средства разработки и тестирования
[править | править код]Для создания приложений на Ruby on Rails используются различные текстовые редакторы и IDE, в том числе:
- JetBrains RubyMine
- Sublime Text
- Visual Studio Code (с плагином для поддержки Ruby)[9]
- Aptana Studio
- CodeGear 3rdRail
- Ruby in Steel (для Visual Studio) — версия 1.2 включает возможность визуального WYSIWYG-проектирования графического интерфейса, транслируя .erb-код в HTML и обратно.
- Flux 1.2 для пользователей Mac OS имеет поддержку Rails.
- Textmate
- Emacs
- Vim
- Atom
Среди инструментов тестирования приложений, поддерживающих Ruby on Rails:
- RSpec — DSL для написания юнит- и интеграционных тестов;
- Cucumber — инструмент для разработки с помощью BDD, позволяет писать тесты на обычном языке.
Использование
[править | править код]Ruby on Rails существенно использовался при создании таких популярных сайтов, как Netflix[10], Bloomberg, Zendesk[10], Твиттер, SoundCloud, Airbnb, Diaspora, Groupon, Basecamp, GitHub, Hulu, Scribd, Kickstarter, Change.org, Bleacher Report[11], SlideShare, ASKfm, Upwork, Mastodon, Genius и других.
История
[править | править код]| Версия | Дата выпуска | Совместимые версии Ruby[12][13] |
|---|---|---|
| 1.0[14] | 13 декабря 2005 | 1.8.6 |
| 1.2[15] | 19 января 2007 | 1.8.6 |
| 2.0[16] | 7 декабря 2007 | 1.8.6 |
| 2.1[17] | 31 мая 2008 | 1.8.6 |
| 2.2[18] | 21 ноября 2008 | рекомендуется 1.8.7; возможна 1.8.6 |
| 2.3[19] | 16 марта 2009 | рекомендуется 1.8.7; возможны 1.8.6 и 1.9.1 |
| 3.0[20] | 29 августа 2010 | рекомендуется 1.9.3; возможны 1.8.7 и 1.9.2 |
| 3.1[21] | 31 августа 2011 | рекомендуется 1.9.3; возможны 1.8.7 и 1.9.2 |
| 3.2[22] | 20 января 2012 | рекомендуется 1.9.3; возможны 1.8.7 и 1.9.2 |
| 4.0[23] | 25 июня 2013 | Предпочтительно 2.0; требуется 1.9.3 или более поздняя |
| 4.1[24] | 8 апреля 2014 | Предпочтительно 2.0; требуется 1.9.3 или более поздняя |
| 4.2[25] | 19 декабря 2014 | Предпочтительно 2.0; требуется 1.9.3 или более поздняя |
| 5.0[26] | 30 июня 2016 | 2.2.2 или более поздняя |
| 5.1[27] | 10 мая 2017 | 2.2.2 или более поздняя |
| 5.2[28] | 9 апреля 2018 | 2.2.2 или более поздняя |
| 6.0[29] | 16 августа 2019 | 2.5.0 или более поздняя |
| 6.1[30] | 9 декабря 2020 | 2.5.0 или более поздняя |
| 7.0[31] | 15 декабря 2021 | 2.7.0 или более поздняя |
| 7.1[32] | 5 октября 2023 | 2.7.0 или более поздняя |
| 7.2[33] | 10 августа 2024 | 3.1.0 или более поздняя |
| 8.0[34] | 7 ноября 2024 | 3.2.0 или более поздняя |
| 8.1[35] | 24 октября 2025 | 3.2.0 или более поздняя |
Старая версия, не поддерживается Старая поддерживаемая версия Текущая версия Будущая версия | ||
Примечания
[править | править код]- ↑ Release 8.1.1 — 2025.
- ↑ The rails Open Source Project on Open Hub: Languages Page — 2006.
- ↑ https://github.com/EvanLi/Github-Ranking/blob/master/Data/github-ranking-2025-07-06.csv — 2025.
- ↑ https://github.com/rails/rails/blob/master/README.md
- ↑ ActionController::API : [арх. 19.02.2019]. — Ruby on Rails. — Дата обращения: 19.02.2019.
- ↑ BitNami :: RubyStack. Дата обращения: 22 февраля 2008. Архивировано 20 февраля 2008 года.
- ↑ JumpBox for Ruby on Rails Deployment | JumpBox Virtual Appliances and Applications for Cloud Computing Архивировано 2 января 2010 года.
- ↑ Community Engine Архивная копия от 28 мая 2009 на Wayback Machine // A Social Networking Plugin for Ruby on Rails
- ↑ Visual Studio Code Ruby Extension : [арх. 19.02.2019]. — Microsoft. — Дата обращения: 19.02.2019.
- ↑ 1 2 5 Commercial Use Cases Continue to Prove the Value of Ruby on Rails : [арх. 19.02.2019]. — Engine Yard, 2018. — 11 April. — Дата обращения: 19.02.2019.
- ↑ Kelli Smith. 37 Sites You LOVE Built With Ruby On Rails : [арх. 19.02.2019]. — Skill Crush, 2018. — 29 April. — Дата обращения: 19.02.2019.
- ↑ Ruby/Rails Compatibility Matrix. devalot.com. Дата обращения: 5 марта 2021. Архивировано из оригинала 18 августа 2022 года.
- ↑ Upgrading Ruby on Rails. edgeguides.rubyonrails.org. Дата обращения: 5 марта 2021.
- ↑ "Rails 1.0: Party like it's one oh oh!" Архивировано 17 декабря 2015 года.. weblog.rubyonrails.org. Retrieved 9 June 2010.
- ↑ "Rails 1.2: REST admiration, HTTP lovefest, and UTF-8 celebrations" Архивировано 2 ноября 2012 года.. weblog.rubyonrails.org. Retrieved 9 June 2010.
- ↑ "Rails 2.0: It's done!" Архивировано 28 мая 2010 года.. weblog.rubyonrails.org. Retrieved 9 June 2010.
- ↑ Rails 2.1: Time zones, dirty, caching, gem dependencies, caching, etc Архивировано 2 ноября 2012 года.. weblog.rubyonrails.org. Retrieved 9 June 2010.
- ↑ "Rails 2.2: i18n, HTTP validators, thread safety, JRuby/1.9 compatibility, docs" Архивировано 2 декабря 2008 года.. weblog.rubyonrails.org. Retrieved 9 June 2010.
- ↑ "Rails 2.3: Templates, Engines, Rack, Metal, much more!" Архивировано 21 марта 2009 года.. weblog.rubyonrails.org. Retrieved 9 June 2010.
- ↑ "Rails 3.0: It's ready!" Архивировано 31 августа 2010 года.. weblog.rubyonrails.org. Retrieved 30 August 2010.
- ↑ bumping to 3.1.0. Github.com. Дата обращения: 31 августа 2011. Архивировано 19 июня 2016 года.
- ↑ Preparing for 3.2.0 release. Github.com. Дата обращения: 22 января 2012. Архивировано 29 июля 2017 года.
- ↑ Rails 4 in 30'. blog.wyeworks.com. Дата обращения: 15 декабря 2012. Архивировано из оригинала 4 декабря 2012 года.
- ↑ Ошибка в сносках?: Неверный тег
<ref>; для сносок41announceне указан текст - ↑ Ошибка в сносках?: Неверный тег
<ref>; для сносок42announceне указан текст - ↑ Ошибка в сносках?: Неверный тег
<ref>; для сносок50announceне указан текст - ↑ Ошибка в сносках?: Неверный тег
<ref>; для сносок51announceне указан текст - ↑ Ошибка в сносках?: Неверный тег
<ref>; для сносок52announceне указан текст - ↑ Ошибка в сносках?: Неверный тег
<ref>; для сносок60announceне указан текст - ↑ Ошибка в сносках?: Неверный тег
<ref>; для сносок61announceне указан текст - ↑ Ошибка в сносках?: Неверный тег
<ref>; для сносок70announceне указан текст - ↑ França, Rafael. Rails 7.1: Dockerfiles, BYO Authentication, More Async Queries, and more! rubyonrails.org. Дата обращения: 5 октября 2023. Архивировано 5 октября 2023 года.
- ↑ França, Rafael. Development of Rails 7.2 starts now. GitHub. Дата обращения: 26 сентября 2023. Архивировано 25 ноября 2023 года.
- ↑ Rails 8.0: No PaaS Required.
- ↑ Rails 8.1: Job continuations, structured events, local CI.
Литература
[править | править код]- Тейт Б., Хиббс К. Ruby on Rails. Быстрая веб-разработка. — СПб.: BHV-Петербург, 2008. — 224 с.
- Хэнссон Д. Х., Томас Д. Гибкая разработка веб-приложений в среде Rails. — СПб.: Питер, 2008. — 720 с.
- Фоулер Ч. Rails. Сборник рецептов. — СПб.: Питер, 2007. — 256 с.
- Фернандес О. Путь Rails. Подробное руководство по созданию приложений в среде Ruby on Rails. — Символ-Плюс, 2008. — 768 с.
- Руби С., Томас Д., Хэнссон Д. Х. Гибкая разработка веб-приложений в среде Rails. — 4-е изд. — Питер, 2012. — 464 с.
- Hartl M. Ruby on Rails Tutorial. — 3rd edition. — Addison-Wesley, 2015. — 664 с. — (Professional Ruby Series). — ISBN 0134077709.