Рубин на рельсах - Ruby on Rails

Рубин на рельсах
Ruby On Rails Logo.svg
Автор (ы) оригинала Дэвид Хайнемайер Ханссон
Первый выпуск Август 2004 г . ; 17 лет назад ( 2004-08 )
Стабильный выпуск
6.1.4  Отредактируйте это в Викиданных / 24 июня 2021 г . ; 2 месяца назад ( 24 июня 2021 г. )
Репозиторий
Написано в Рубин
Размер 57,8 МБ
Тип Фреймворк веб-приложений
Лицензия Лицензия MIT
Веб-сайт rubyonrails .org Отредактируйте это в Викиданных

Ruby on Rails или Rails - это серверная среда веб-приложений, написанная на Ruby под лицензией MIT . Rails - это фреймворк модель-представление-контроллер (MVC), предоставляющий структуры по умолчанию для базы данных , веб-службы и веб-страниц . Он поощряет и упрощает использование веб-стандартов, таких как JSON или XML, для передачи данных и HTML , CSS и JavaScript для взаимодействия с пользователем. В дополнение к MVC, Rails подчеркивает использование других хорошо известных шаблонов и парадигм программной инженерии , включая соглашение по конфигурации (CoC), не повторяйтесь (DRY) и шаблон активной записи .

Появление Ruby on Rails в 2005 году сильно повлияло на разработку веб-приложений благодаря новаторским функциям, таким как бесшовное создание таблиц базы данных , миграции и формирование шаблонов представлений для обеспечения быстрой разработки приложений. Влияние Ruby on Rails на другие веб-фреймворки остается очевидным и сегодня, многие фреймворки на других языках заимствуют его идеи, включая Django в Python , Catalyst в Perl , Laravel , CakePHP и Yii в PHP , Grails в Groovy , Phoenix в Elixir , Play in Scala и Sails.js в Node.js .

Некоторые известные сайты, использующие Ruby on Rails, включают Airbnb , Crunchbase , Bloomberg и Dribbble .

История

Дэвид Хайнемайер Ханссон извлек Ruby on Rails из своей работы над инструментом управления проектами Basecamp в компании, занимающейся веб-приложениями, также называемой Basecamp (в то время 37Signals). Ханссон впервые выпустил Rails как открытый исходный код в июле 2004 года, но не поделился правами на коммит в проект до февраля 2005 года. В августе 2006 года фреймворк достиг важной вехи, когда Apple объявила о выпуске Ruby on Rails с Mac OS X v10.5. «Леопард» , выпущенный в октябре 2007 года.

Версия 2.3 Rails была выпущена 15 марта 2009 г., и в нее были внесены важные изменения в шаблонах, движках, формах Rack и вложенных моделей. Шаблоны позволяют разработчику создавать скелет приложения с пользовательскими драгоценными камнями и конфигурациями. Движки дают разработчикам возможность повторно использовать части приложения с маршрутами, путями просмотра и моделями. Интерфейс веб-сервера Rack и Metal позволяют писать оптимизированные фрагменты кода, которые работают с Action Controller.

23 декабря 2008 г. был запущен еще один фреймворк для веб-приложений Merb , и Ruby on Rails объявила, что будет работать с проектом Merb, чтобы внедрить «лучшие идеи Merb» в Rails 3, положив конец «ненужному дублированию» в обоих сообществах. . Merb был объединен с Rails как часть выпуска Rails 3.0.

31 августа 2011 года был выпущен Rails 3.1, включающий обратимые миграции баз данных, Asset Pipeline, Streaming, jQuery в качестве библиотеки JavaScript по умолчанию и недавно представленные в стеке CoffeeScript и Sass .

Rails 3.2 был выпущен 20 января 2012 года с более быстрым режимом разработки и механизмом маршрутизации (также известным как движок Journey), автоматическим объяснением запросов и ведением журнала с тегами. Rails 3.2.x - последняя версия, поддерживающая Ruby 1.8.7. Rails 3.2.12 поддерживает Ruby 2.0.

Rails 4.0 был выпущен 25 июня 2013 года и представил Russian Doll Caching, Turbolinks, Live Streaming, а также сделал Active Resource, Active Record Observer и другие компоненты необязательными, разделив их как драгоценные камни.

Rails 4.1 был выпущен 8 апреля 2014 года и представил Spring, Variants, Enums, Previews Mailer и secrets.yml.

Rails 4.2 был выпущен 19 декабря 2014 года и представил Active Job, асинхронные электронные письма, Adequate Record, Web Console и внешние ключи .

Rails 5.0 был выпущен 30 июня 2016 года и представил Action Cable, режим API и Turbolinks 5.

Rails 5.0.0.1 был выпущен 10 августа 2016 года с эксклюзивным использованием интерфейса командной строки rails поверх Rake и поддержкой Ruby версии 2.2.2 и выше.

Rails 5.1 был выпущен 27 апреля 2017 года, в него были внесены изменения интеграции JavaScript (управление зависимостями JavaScript от NPM через Yarn, необязательная компиляция JavaScript с использованием Webpack и переписывание Rails UJS для использования ванильного JavaScript вместо зависимости от jQuery), системные тесты с использованием Capybara , зашифрованных секретов, параметризованных почтовых программ, прямых и разрешенных маршрутов и унифицированного помощника form_with, заменяющего помощники form_tag / form_for.

Rails 5.2 был выпущен 9 апреля 2018 года и представил новые функции, включая ActiveStorage, встроенное хранилище кэша Redis, обновленные учетные данные Rails и новый DSL, который позволяет настраивать политику безопасности контента для приложения.

Rails 5.2.2 был выпущен 4 декабря 2018 года, в него были внесены многочисленные исправления ошибок и несколько улучшений логики.

Rails 6.0 был выпущен 16 августа 2019 года, делая Webpack по умолчанию, добавляя маршрутизацию почтовых ящиков, онлайн-редактор форматированного текста по умолчанию , параллельное тестирование, поддержку нескольких баз данных, маршрутизацию почтовой программы и новый автозагрузчик.

Rails 6.1 был выпущен 9 декабря 2020 года, добавляя переключение соединений для каждой базы данных, горизонтальное сегментирование базы данных, активную загрузку всех ассоциаций, делегированные типы в качестве альтернативы однотабличному наследованию, асинхронное удаление ассоциаций, объектов ошибок и другие улучшения и исправление ошибок.

История версий
Версия Дата выхода Совместимая версия (и) Ruby
Старая версия, больше не поддерживается: 1.0 13 декабря 2005 г. 1.8.6
Старая версия, больше не поддерживается: 1.2 19 января 2007 г. 1.8.6
Старая версия, больше не поддерживается: 2.0 7 декабря 2007 г. 1.8.6
Старая версия, больше не поддерживается: 2.1 1 июня 2008 г. 1.8.6
Старая версия, больше не поддерживается: 2.2 21 ноября 2008 г. 1.8.7 рекомендуется; 1.8.6 возможно
Старая версия, больше не поддерживается: 2.3 16 марта 2009 г. 1.8.7 рекомендуется; Возможны 1.8.6 и 1.9.1
Старая версия, больше не поддерживается: 3.0 29 августа 2010 г. 1.9.3 рекомендуется; Возможны 1.8.7 и 1.9.2
Старая версия, больше не поддерживается: 3.1 31 августа 2011 г. 1.9.3 рекомендуется; Возможны 1.8.7 и 1.9.2
Старая версия, больше не поддерживается: 3,2 20 января 2012 г. 1.9.3 рекомендуется; Возможны 1.8.7 и 1.9.2
Старая версия, больше не поддерживается: 4.0 25 июня 2013 г. 2,0 предпочтительнее; 1.9.3 или новее требуется
Старая версия, больше не поддерживается: 4.1 8 апреля 2014 г. 2,0 предпочтительнее; 1.9.3 или новее требуется
Старая версия, больше не поддерживается: 4.2 19 декабря 2014 г. 2,0 предпочтительнее; 1.9.3 или новее требуется
Старая версия, больше не поддерживается: 5.0 30 июня 2016 г. 2.2.2 или новее
Старая версия, больше не поддерживается: 5.1 10 мая 2017 г. 2.2.2 или новее
Старая версия, но все еще поддерживается: 5.2 9 апреля 2018 г. 2.2.2 или новее
Старая версия, но все еще поддерживается: 6.0 16 августа 2019 г., 2.5.0 или новее
Текущая стабильная версия: 6.1 9 декабря 2020 г. 2.5.0 или новее
Будущий выпуск: 7.0 TBA 3.0 предпочтительнее; 2.7.0 или новее
Легенда:
Старая версия
Старая версия, все еще поддерживается
Последняя версия
Последняя предварительная версия
Будущий выпуск


Технический обзор

Как и другие веб-фреймворки, Ruby on Rails использует шаблон модель – представление – контроллер (MVC) для организации программирования приложений.

В конфигурации по умолчанию модель в среде Ruby on Rails сопоставляется с таблицей в базе данных и файлом Ruby. Например, класс модели User обычно определяется в файле user.rb в каталоге app / models и связан с таблицей users в базе данных. Хотя разработчики могут игнорировать это соглашение и выбирать разные имена для своих моделей, файлов и таблиц базы данных, это не обычная практика и обычно не приветствуется в соответствии с философией « соглашения над конфигурацией ».

Контроллер представляет собой компонент на стороне сервера рельсов , который отвечает на запросы от внешних веб - сервера к приложению, путь определения , какой файл вида для визуализации. Контроллеру также может потребоваться запросить информацию у одной или нескольких моделей и передать их представлению. Например, в системе бронирования авиакомпаний контроллеру, реализующему функцию поиска рейсов, потребуется запросить модель, представляющую отдельные рейсы, чтобы найти рейсы, соответствующие поиску, а также может потребоваться запросить модели, представляющие аэропорты и авиакомпании, чтобы найти связанные вторичные данные. Затем контроллер может передать некоторое подмножество полетных данных в соответствующее представление, которое будет содержать смесь статического HTML и логики, использующей полетные данные для создания HTML-документа, содержащего таблицу с одной строкой на рейс. Контроллер может предоставить одно или несколько действий. В Ruby on Rails действие обычно представляет собой базовую единицу, описывающую, как отвечать на конкретный запрос внешнего веб-браузера. Также обратите внимание, что контроллер / действие будут доступны для внешних веб-запросов, только если ему сопоставлен соответствующий маршрут. Rails рекомендует разработчикам использовать маршруты RESTful , которые включают такие действия, как создание, создание, редактирование, обновление, уничтожение, отображение и индексирование. Эти сопоставления входящих запросов / маршрутов с действиями контроллера можно легко настроить в файле конфигурации routes.rb.

Вид в конфигурации по умолчанию Rails является эрб файл, который вычисляется и преобразуется в HTML во время выполнения. В качестве альтернативы для представлений можно использовать многие другие системы шаблонов.

Ruby on Rails включает инструменты, которые «из коробки» упрощают общие задачи разработки, такие как строительные леса, которые могут автоматически создавать некоторые модели и представления, необходимые для базового веб-сайта . Также включены WEBrick , простой веб-сервер Ruby, который распространяется вместе с Ruby, и Rake , система сборки, распространяемая как гем . Вместе с Ruby on Rails эти инструменты обеспечивают базовую среду разработки.

Ruby on Rails чаще всего подключается к Интернету не напрямую, а через некоторый интерфейсный веб-сервер . Вначале Mongrel обычно предпочитался WEBrick, но он также может работать на Lighttpd , Apache , Cherokee , Hiawatha , Nginx (либо как модуль, например Phusion Passenger, либо через CGI , FastCGI или mod ruby ) и многие другие. . С 2008 года Passenger заменил Mongrel как наиболее часто используемый веб-сервер для Ruby on Rails. Ruby также изначально поддерживается IBM i .

Ruby on Rails также примечателен широким использованием библиотек JavaScript Prototype и Script.aculo.us для создания сценариев действий Ajax . Ruby on Rails изначально использовал облегченный протокол SOAP для веб-служб; Позже это было заменено веб-службами RESTful . Ruby on Rails 3.0 отделяет разметку страницы (которая определяет структуру страницы) от сценариев (которые определяют функциональность или логику страницы). jQuery полностью поддерживается в качестве замены Prototype и является библиотекой JavaScript по умолчанию в Rails 3.1, отражая переход всей отрасли к jQuery. Кроме того, CoffeeScript был представлен в Rails 3.1 как язык JavaScript по умолчанию.

Начиная с версии 2.0, Ruby on Rails предлагает как HTML, так и XML в качестве стандартных форматов вывода. Последний является средством для веб-сервисов RESTful.

Rails 3.1 представил Sass как стандартный шаблон CSS .

По умолчанию сервер использует Embedded Ruby в представлениях HTML с файлами, имеющими расширение html.erb. Rails поддерживает замену альтернативных языков шаблонов, таких как HAML и Mustache .

Ruby on Rails 3.0 был разработан для работы с Ruby 1.8.7, Ruby 1.9.2 и JRuby 1.5.2+; более ранние версии не поддерживаются.

Ruby on Rails 3.2 - последняя серия выпусков, поддерживающих Ruby 1.8.7.

Структура каркаса

Ruby on Rails разделен на различные пакеты, а именно ActiveRecord (система объектно-реляционного сопоставления для доступа к базе данных), Action Pack, Active Support и Action Mailer. До версии 2.0 Ruby on Rails также включал пакет веб-службы действий, который теперь заменен Active Resource. Помимо стандартных пакетов, разработчики могут создавать плагины для расширения существующих пакетов. Раньше Rails поддерживал плагины в своей собственной пользовательской структуре; версия 3.2 заменяет их стандартными «драгоценными камнями» Ruby.

Развертывание

Ruby on Rails часто устанавливается с помощью RubyGems , менеджера пакетов, который включен в текущие версии Ruby. Многие бесплатные Unix-подобные системы также поддерживают установку Ruby on Rails и его зависимостей через собственную систему управления пакетами .

Ruby on Rails обычно развертывается с сервером базы данных, таким как MySQL или PostgreSQL , и веб-сервером, например Apache, на котором запущен модуль Phusion Passenger .

Философия и дизайн

Ruby on Rails предназначен для того, чтобы сделать упор на конвенцию, а не на конфигурацию (CoC) и принцип « Не повторяйся» (DRY).

Доктрина Rails - это надежный помощник, который определяет философию, дизайн и реализацию фреймворка Ruby on Rails.

«Соглашение важнее конфигурации» означает, что разработчику нужно только указать нетрадиционные аспекты приложения. Например, если в модели есть класс Продажа , соответствующая таблица в базе данных по умолчанию называется продажами . Только если кто-то отклоняется от этого соглашения, например, называя таблицу «проданные продукты», разработчику необходимо написать код, относящийся к этим именам. Как правило, соглашения Ruby on Rails приводят к меньшему количеству кода и меньшему количеству повторений.

«Не повторяйся» означает, что информация находится в одном недвусмысленном месте. Например, при использовании модуля ActiveRecord в Rails разработчику не нужно указывать имена столбцов базы данных в определениях классов. Вместо этого Ruby on Rails может извлекать эту информацию из базы данных на основе имени класса.

«Толстые модели, тонкие контроллеры» означает, что большая часть логики приложения должна быть помещена в модель, оставляя контроллер как можно более легким.

Товарные знаки

В марте 2007 года Дэвид Хайнемайер Ханссон подал заявку на регистрацию трех торговых марок, связанных с Ruby on Rails, в USPTO . Эти приложения касаются фразы «RUBY ON RAILS», слова «RAILS» и официального логотипа Rails. Летом 2007 года Ханссон отказал Apress в разрешении на использование логотипа Ruby on Rails на обложке новой книги Ruby on Rails, написанной некоторыми авторитетными членами сообщества. Этот эпизод вызвал вежливый протест в сообществе Ruby on Rails. В ответ на эту критику Ханссон ответил:

Я разрешаю использование [логотипа Rails] в рекламных целях только для продуктов, с которыми я непосредственно связан. Например, книги, в разработке которых я участвовал, или конференции, на которых я имею право голоса при исполнении. Я определенно буду стремиться обеспечить соблюдение всех торговых марок Rails.

Прием

Масштабируемость

Rails, работающий на Ruby Interpreter Matz ( де-факто эталонный интерпретатор Ruby), подвергался критике за проблемы с масштабируемостью. Эти критики часто упоминали различные сбои в работе Twitter в 2007 и 2008 годах, которые спровоцировали частичный переход Twitter на Scala (который работает на виртуальной машине Java ) для своей системы очередей и другого промежуточного программного обеспечения . Аспекты пользовательского интерфейса сайта продолжали работать на Ruby on Rails до 2011 года, когда он был заменен из-за проблем с производительностью.

В 2011 году Gartner Research отметила, что, несмотря на критику и сравнения с Java, многие известные потребительские веб-компании используют Ruby on Rails для создания масштабируемых веб-приложений. Некоторые из крупнейших сайтов, на которых работает Ruby on Rails, включают Airbnb , Cookpad , GitHub , Scribd , Shopify и Basecamp . По оценкам, по состоянию на январь 2016 года более 1,2 миллиона веб-сайтов используют Ruby on Rails.

Безопасность

В марте 2012 года исследователь безопасности Егор Хомаков обнаружил уязвимость массового назначения, которая позволяла удаленно использовать определенные приложения Rails, и продемонстрировал это, взломав GitHub без злого умысла после того, как его предыдущие попытки ответственного раскрытия информации были отклонены.

24 сентября 2013 г. в Ruby on Rails была обнаружена уязвимость, связанная с сохранением сохраняемости файлов cookie. В конфигурации по умолчанию весь хэш сеанса хранится в файле cookie сеанса, известном как CookieStore , что позволяет любому аутентифицированному сеансу, имеющему файл cookie сеанса, войти в систему в качестве целевого пользователя в любое время в будущем. В качестве обходного пути администраторам рекомендуется настроить файлы cookie для хранения на сервере, используя такие механизмы, как ActiveRecordStore .

Исследователи Дэниел Джексон и Джозеф Ниар разработали отладчик данных, который они назвали «Space», который может анализировать доступ к данным программы Rails и определять, правильно ли программа придерживается правил, касающихся ограничений доступа. 15 апреля 2016 года Near сообщил, что анализ 50 популярных веб-приложений с использованием Space выявил 23 ранее неизвестных уязвимости безопасности.

использованная литература

Библиография

внешние ссылки