[Перевод] Rails сквозь года: Ключевые изменения от версии 1 к версии 8

82e056f31876dd72e819086a31933a3f

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

Рождение Rails (2004): Почему Rails был создан

В начале 2000-х годов создание веб-приложений часто было утомительным и требовало повторяющегося кода для обработки взаимодействий с базой данных и логики приложения. Дэвид Хайнемайер Ханссон (DHH), разрабатывая Basecamp, осознал необходимость в фреймворке, который акцентировал бы внимание на соглашениях, а не на конфигурации (convention over configuration), и на счастье разработчиков.

  • Основа философии Rails:

    DRY (Don’t Repeat Yourself): Сократить повторение кода путем вынесения поторяющихся паттернов в абстракции;

    Соглашение вместо конфигурации (Convention Over Configuration): предоставить разумные стандартные настройки, чтобы минимизировать количество конфигураций

    Фулл-стек фреймворк: предложить инструменты для всего процесса разработки, от миграций базы данных до управления ассетами на фронт-энде

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

Rails 1 (2005): Начало простоты

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

Rails 1 стал хорошим началом. В 2006, он (фреймворк) выиграл награду «Язык года» от Tiobe. Однако затем команда разработки столкнулась с некоторыми проблемами. Среди них:

  1. Ограниченная масштабируемость больших приложений;

  2. Отсутствие RESTful маршрутизации привело к дезорганизации контроллеров;

  3. Уязвимости безопасности, такие как риски массового присвоения (mass assignment), были распространены.

Это привело к новой версии — Rails 2.

Rails 2 (2007): Укрепление фундамента

Rails 2 укрепило фреймворк улучшением масштабируемости, представив RESTful дизайн и улучшив безопасность.

  • Примечательные методы/фичи:

    named_scope => для создания цепочки методов запросов к базе данных;

    before_filter => (позже before_action) для реализации DRY принципа в методах контроллеров

    respond_to => для реализации множества форматов ответа сервера (HTML, JSON, XML).

Популярность Rails в этот момент начала расти. Некоторые из наиболее популярных приложений (Twitter, Hulu, Shopify) начали использовать его как основной фреймворк.

23 декабря 2008 был запущен Merb, еще один фреймворк для создания веб-приложений. Он был очень похож на Rails, что вызвало множество столкновений в сообществах обоих фреймворков. Однако, в это время команда Rails работала с Merb и Merb был объединен с Rails.

Однако у системы были свои недостатки. Плагинам и гемам недоставало стандартизации, проблемы производительности в сложных запросах становились болью, и ручная обработка состояний и сложной логики моделей вызывала трудности.

Rails 3 (2010): Консолидация и модуляризация

Rails 3 ознаменовал поворотный момент в истории Rails, объединив разрозненные компоненты в единую структуру. Эта версия положила основу в современный Rails, оптимизируя разработку и улучшая производительность.

  • Примечательные методы / фичи:

    where: метод ActiveRecord для упрощения сложных запросов;

    respond_to: был улучшен для обработки нескольких форматов более элегантно.

    Добавлен asset pipeline (Rails 3.1), чтобы стандартизировать управление JavaScript, CSS, что решило проблему масштабирования фронт-энд ассетов.

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

Rails 4 (2013): Улучшения конвенций и производительности

Основываясь на фундаменте Rails 3, Rails 4 улучшил производительность, безопасность, ввёл конвенции, сделавшией приложения более надежными.

  • Примечательные методы / фичи:

    belongs_to ассоциации стали обязательными по умолчанию для предотвращения проблем с целостностью данных

    enum для ActiveRecord для управления состоянием с помощью целочисленных отображений, отвечающее потребности более простого управления состоянием

    has_secure_password включен в ActiveModel, чтобы упростить процесс аутентификации

В этой версии turbolinks внес несогласованность в сложные JavaScript приложения, производительность asset pipeline’ов замедлилась с ростом приложений. Зависимость обработчиков фоновых задач от Redis усложнила инфраструктуру. Это вызвало потребность в новой версии Rails, Rails 5.

Rails 5 (2016): API режим и Real-Time фичи

Rails 5 удоавлетворил растущую потребность в API и real-time фичах, подготовив сцену для интерактивных и масштабируемых приложений.

  • Примечательные методы / фичи:

    Добавлены хуки after_commit и after_rollback для более точного контроля транзакций в базе данных

    rails db: setup объединил первоначальную настройку базы данных со схемой и начальными данными в одну команду.

В то время, как Rails 5 привнёс режим API, множество приложений все еще сталкивалось с проблемами в разделении монолитных структур, что приводило к проблемам с производительностью в больших приложениях. Хотя ActionCable и был добавлен, WebSocket’ы приводили к сложностям с масштабируемостью и развертыванием. Также отсутствие единого способа управления очередями фоновых задач вело к несогласованности и зависимости от множества гемов. Иммено тогда был представлен Rails 6.

Rails 6 (2019): Продуктивность и масштабируемость

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

  • Примечательные методы / фичи:

    Метод has_rich_text упрощает управление большими текстами

    rails db:system:change позволяет бесшовно сменить базу данных

    Улучшена производительность ассоциаций has_many :through

В Rails 6 Sprockets становился все более и более медленным для больших приложений, вызывая замедления в производительности. Webpacker улучшил управление ассетами, но его конфигурация была сложной и становилась причиной ошибок. Обновление до более новых версий стало проблемой из за ошибок Webpack. Также, несмотря на то, что была добавлена поддержка нескольких баз данных, кэширование и улучшение производительности все еще требовало значительного ручного вмешательства.

Rails 7 (2021): Фулл-стек разработка и простота

Rails 7 упростил фулл-стек разработку минимизировав JavaScript-зависимости и предлагая более сконцентрированный на Rails подход.

  • Примечательные методы / фичи:

    config.load_defaults 7.0 упрощает обновление до новых значений по умолчанию

    rails new app --css=tailwind упростил интеграцию с Tailwind CSS

    Добавлено встроенное шифрование для конфиденциальных атрибутов ActiveRecord.

До нынешнего момента обработка фоновых задач сильно полагалась на Redis, увеличивая стоимость и сложность инфраструктуры. Отсутствие встроенной аутентификации привело к зависимости от Devise или кастомных имплементаций, ведущих к переусложнению проекта.

Rails 8 (2024): Эффективность, простота и новые инструменты развертывания

Rails 8 представляет набор функций, отдающих приоритет оперативности развертывания приложения, более компактным конфигурациям и бесшовной аутентификации.

  • Ключевые изменения:

    1. Развертывание без усилий: интеграция с Kamal 2 и Thruster упрощает процессы развертывания;

    2. SolidQueue для фоновых задач: заменяет Redis, позволяя ActiveJob обрабатывать фоновые задачи не полагаясь на внешние системы;

    3. Propshaft Asset Pipeline: более легкая альтернатива Sprockets, упрощающая управление ассетами;

    4. Встроенная аутентификация: аутентификация «из коробки», уменьшающая зависимость от внешних гемов вроде Devise;

    5. Папка скриптов и генератор: новая script директория для организации кастомных скриптов и упрощенный генератор для создания шаблонного кода быстрее;

  • Примечательные методы / фичи:

    Метод authenticate прямо в контроллерах для управления сессией

    Команда deploy для бесшовной интеграции

    propshaft.append_path для кастомизации менеджмента ассетов

Заключение

Rails вырос от простого веб-фреймворка до мощного, масштабируемого решения для современных веб-приложений. Каждая версия отвечает эволюционирующим требованиям разработчиков. Не важно, поддерживаете ли вы Rails 3 приложение или создаете новое Rails 7, понимание пути помогает вам создавать приложения быстрее, лучше и более безопасно. Кроме того, будущее Rails указывает на разработку на основе ИИ и передовые технологии, такие как WebAssembly. Так что следите за последними обновлениями.

© Habrahabr.ru