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, в том числе:

Среди инструментов тестирования приложений, поддерживающих Ruby on Rails:

Использование

править

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 или более поздняя
Легенда:
Старая версия, не поддерживается
Старая поддерживаемая версия
Текущая версия
Тестовая версия
Будущая версия

Примечания

править
  1. Release (8.1.3)
  2. The rails Open Source Project on Open Hub: Languages Page — 2006.
  3. https://github.com/EvanLi/Github-Ranking/blob/master/Data/github-ranking-2025-07-06.csv — 2025.
  4. https://github.com/rails/rails/blob/master/README.md
  5. ActionController::API : [арх. 19.02.2019]. — Ruby on Rails. — Дата обращения: 19.02.2019.
  6. BitNami :: RubyStack. Дата обращения: 22 февраля 2008. Архивировано 20 февраля 2008 года.
  7. JumpBox for Ruby on Rails Deployment | JumpBox Virtual Appliances and Applications for Cloud Computing Архивировано 2 января 2010 года.
  8. Community Engine Архивная копия от 28 мая 2009 на Wayback Machine // A Social Networking Plugin for Ruby on Rails
  9. Visual Studio Code Ruby Extension : [арх. 19.02.2019]. — Microsoft. — Дата обращения: 19.02.2019.
  10. 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.
  11. Kelli Smith. 37 Sites You LOVE Built With Ruby On Rails : [арх. 19.02.2019]. — Skill Crush, 2018. — 29 April. — Дата обращения: 19.02.2019.
  12. Ruby/Rails Compatibility Matrix. devalot.com. Дата обращения: 5 марта 2021. Архивировано из оригинала 18 августа 2022 года.
  13. Upgrading Ruby on Rails. edgeguides.rubyonrails.org. Дата обращения: 5 марта 2021.
  14. "Rails 1.0: Party like it's one oh oh!" Архивировано 17 декабря 2015 года.. weblog.rubyonrails.org. Retrieved 9 June 2010.
  15. "Rails 1.2: REST admiration, HTTP lovefest, and UTF-8 celebrations" Архивировано 2 ноября 2012 года.. weblog.rubyonrails.org. Retrieved 9 June 2010.
  16. "Rails 2.0: It's done!" Архивировано 28 мая 2010 года.. weblog.rubyonrails.org. Retrieved 9 June 2010.
  17. Rails 2.1: Time zones, dirty, caching, gem dependencies, caching, etc Архивировано 2 ноября 2012 года.. weblog.rubyonrails.org. Retrieved 9 June 2010.
  18. "Rails 2.2: i18n, HTTP validators, thread safety, JRuby/1.9 compatibility, docs" Архивировано 2 декабря 2008 года.. weblog.rubyonrails.org. Retrieved 9 June 2010.
  19. "Rails 2.3: Templates, Engines, Rack, Metal, much more!" Архивировано 21 марта 2009 года.. weblog.rubyonrails.org. Retrieved 9 June 2010.
  20. "Rails 3.0: It's ready!" Архивировано 31 августа 2010 года.. weblog.rubyonrails.org. Retrieved 30 August 2010.
  21. bumping to 3.1.0. Github.com. Дата обращения: 31 августа 2011. Архивировано 19 июня 2016 года.
  22. Preparing for 3.2.0 release. Github.com. Дата обращения: 22 января 2012. Архивировано 29 июля 2017 года.
  23. Rails 4 in 30'. blog.wyeworks.com. Дата обращения: 15 декабря 2012. Архивировано из оригинала 4 декабря 2012 года.
  24. Ошибка в сносках?: Неверный тег <ref>; для сносок 41announce не указан текст
  25. Ошибка в сносках?: Неверный тег <ref>; для сносок 42announce не указан текст
  26. Ошибка в сносках?: Неверный тег <ref>; для сносок 50announce не указан текст
  27. Ошибка в сносках?: Неверный тег <ref>; для сносок 51announce не указан текст
  28. Ошибка в сносках?: Неверный тег <ref>; для сносок 52announce не указан текст
  29. Ошибка в сносках?: Неверный тег <ref>; для сносок 60announce не указан текст
  30. Ошибка в сносках?: Неверный тег <ref>; для сносок 61announce не указан текст
  31. Ошибка в сносках?: Неверный тег <ref>; для сносок 70announce не указан текст
  32. França, Rafael. Rails 7.1: Dockerfiles, BYO Authentication, More Async Queries, and more! rubyonrails.org. Дата обращения: 5 октября 2023. Архивировано 5 октября 2023 года.
  33. França, Rafael. Development of Rails 7.2 starts now. GitHub. Дата обращения: 26 сентября 2023. Архивировано 25 ноября 2023 года.
  34. Rails 8.0: No PaaS Required.
  35. 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.

Ссылки

править

📚 Artikel Terkait di Wikipedia

Qt

библиотеки, позволяющие использовать преимущества Qt: Python — PyQt, PySide; Ruby — QtRuby; Java — QtJambi; PHP — PHP-Qt и другие. Со времени своего появления

SQLite

награду Google-O’Reilly Open Source Awards. Слово «встраиваемый» (англ. embedded) означает, что SQLite не использует парадигмы клиент-сервер, то есть движок

Protocol Buffers

памяти); nanopb (оптимизирован под низкое потребление памяти); protobuf-embedded-c (архивный проект). Наиболее высокопроизводительной альтернативой может

Веб-мастер

интерпретируемыми языками программирования, такими как Perl, PHP, Python, Ruby или др., для обслуживания интерактивных элементов веб-сайта (то есть разделов

Статический анализ кода

кода[англ.] MISRA C Software Quality Objectives for Source Code. Proceedings Embedded Real Time Software and Systems 2010 Conference, ERTS2, Toulouse, France:

WxWidgets

для Бейсик wxPerl — для Perl wxPython — для Python wxRuby — для Ruby Anvil — для Ruby, на базе wxRuby, с улучшеным синтаксисом wxSqueak — для Smalltalk wxLua —

ActiveState Komodo

шаблонов — Embedded Perl, Mason, RHTML, Smarty, Template Toolkit. Komodo IDE также содержит отладчик и проверку синтаксиса для Perl, PHP, Python, Ruby, Tcl

Kotlin

support for JVM, Android, JavaScript, iOS, Linux, Windows, Mac and even embedded systems like STM32, Kotlin can handle any and all components of a modern