Рейлс через роки: ключові зміни з версії 1 до 8
Ruby on Rails став основою веб-розробки з моменту свого створення, надаючи розробникам можливість створювати масштабовані та підтримувані веб-додатки. З розвитком Rails кожна нова версія приносила нові функціональні можливості, покращення продуктивності та посилення безпеки. Завдяки відкритому вихідному коду розробники постійно вирішували існуючі проблеми та додавали поліпшення, зберігаючи фреймворк в синхронії з новими тенденціями. Отже, давайте разом розглянемо шлях Rails як фреймворка від його початку до останніх досягнень.
Зміни — єдине постійне в технологіях
Народження Rails (2004): чому був створений Rails
На початку 2000-х створення веб-додатків часто вимагало написання повторюваного коду для обробки взаємодій з базою даних і логіки додатків. David Heinemeier Hansson (DHH), розробляючи Basecamp, усвідомив необхідність фреймворка, який акцентував би увагу на конвенціях над конфігурацією і щасті розробників.
- Основна філософія Rails:
DRY (Don’t Repeat Yourself): Зменшити дублювання коду, абстрагувавши повторювані шаблони.
Конвенція над конфігурацією: Надавати розумні значення за умовчанням, щоб зменшити витрати на налаштування.
Фреймворк "повного стеку": Надати інструменти для всього процесу розробки — від міграцій бази даних до управління активами на фронтенді.
Rails був створений для того, щоб спростити веб-розробку, зменшуючи кількість коду та пропонуючи структурований, але гнучкий фреймворк.
Rails 1 (2005): Початок простоти
Rails 1 представив світу новий і революційний спосіб створення веб-додатків, зосереджуючись на продуктивності розробників та зручності використання.
- Ключові зміни:
1. ActiveRecord: Надано ORM для керування записами в базі даних.
2. Scaffolding: Автоматично генерували моделі, уявлення та контролери, прискорюючи прототипування.
3. Міграції: Спрощено зміни схеми бази даних, зменшуючи потребу в написанні SQL вручну.
4. Допоміжні методи: Заохочувалася сепарація коду для чистіших уявлень і кращої підтримуваності.
5. Інтегроване тестування: Тестування стало важливою частиною Rails, спрощуючи процес TDD.
Rails 1 став хорошим початком. У 2006 році він отримав "Програмістську мову року" від Tiobe, але потім команда розробників зіткнулася з деякими проблемами, такими як:
1. обмежена масштабованість для більших додатків.
2. відсутність RESTful маршрутизації, що призводило до неорганізованих контролерів.
3. Уразливості безпеки, такі як ризики масового присвоєння, були поширеними.
Це призвело до наступної версії Rails — Rails 2.
Rails 2 (2007): Укріплення основи
Rails 2 укріпив фреймворк, покращивши масштабованість, запровадивши RESTful дизайн та поліпшивши безпеку.
- Ключові зміни:
1. RESTful маршрутизація: Спрощено і стандартизовано, як додатки обробляють URL та контролери.
2. Генератори ресурсів: Покращено scaffolding для узгодженості з RESTful архітектурою.
3. HTTP кешування: Покращено продуктивність за допомогою вбудованих механізмів HTTP кешування.
4. Покращення безпеки: Захист від CSRF атак був доданий для запобігання підробці запитів.
5. Геми та плагіни: Спрощено додавання сторонніх бібліотек і плагінів.
- Відомі методи/функції:
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, спрощуючи розробку та покращуючи продуктивність.
- Ключові зміни:
1. Об'єднання компонентів Rails: Об'єднання компонентів Rails (ActionPack, ActiveModel тощо) в єдину цілісну структуру для зменшення фрагментації та покращення підтримки.
2. ActiveRelation: Введення для покращення запитів ActiveRecord через ланцюгування методів, що підвищує читаємість і продуктивність.
3. Рефакторинг валідацій: Виділення і модульність валідацій ActiveModel, що дозволило їх повторне використання поза ActiveRecord для більшої гнучкості.
4. Покращення маршрутизації: Спрощення визначень маршрутів через новий DSL, що дозволяє створювати більш читабельні та організовані маршрути.
5. Захист від XSS за замовчуванням: Покращена безпека за замовчуванням для боротьби з уразливостями, пов'язаними з міжсайтовими скриптами.
- Помітні методи/функції:
Метод
where
для ActiveRecord для спрощення складних запитів.
respond_to
було покращено для елегантної обробки кількох форматів відповідей.Asset pipeline (додано в 3.1) для стандартизації управління JavaScript, CSS та зображеннями, що вирішувало проблеми масштабованості для фронтенд-активів.
Проте ці зміни також призвели до нових проблем. Asset pipeline додав складнощі в робочі процеси розробки. Проблеми з продуктивністю почали виникати в масштабних розгортаннях, а обробка фонових завдань була обмежена.
Rails 4 (2013): Покращення Продуктивності та Конвенцій
Розвиваючи солідну основу Rails 3, Rails 4 удосконалив продуктивність, покращив безпеку та запровадив конвенції, що зробили додатки більш стабільними.
- Ключові зміни:
1. Strong Parameters: Додано для запобігання вразливості масового призначення, враховуючи зростаючі проблеми з маніпуляцією параметрами.
2. Turbolinks: Підвищення продуктивності завдяки завантаженню часткових HTML-сторінок замість повних перезавантажень, що вирішувало проблему повільної навігації.
3. Фонові завдання: ВведеноActiveJob
як абстракцію, що дозволяє стандартизовано обробляти фонові завдання через різні бекенди завдань.
4. Покращення ActionMailer: Спрощення шаблонів електронної пошти та введення попереднього перегляду вбудованих повідомлень для підвищення продуктивності розробників.
5. Concerns: Заохочення розділення спільної логіки вconcerns
, що покращує організацію коду та зменшує його роздування в моделях.
- Помітні методи/функції:
Тепер асоціації
belongs_to
стали обов'язковими за замовчуванням, щоб уникнути проблем з цілісністю даних.
enum
для ActiveRecord для управління станом за допомогою цілих чисел, що відповідає потребі в простішому управлінні станом.
has_secure_password
був інтегрований безпосередньо в ActiveModel для спрощення процесу аутентифікації.
У цій версії turbolinks викликав несумісності зі складними JavaScript-додатками, продуктивність asset pipeline сповільнилася зі збільшенням розміру додатків, а залежність від Redis для фонових завдань збільшила складність інфраструктури. Це викликало потребу в наступній версії Rails — Rails 5.
Rails 5 (2016): API-режим та Реальний Час
Rails 5 відгукнувся на зростаючий попит на API та реальний час, створивши базу для більш інтерактивних і масштабованих додатків.
- Ключові зміни:
1. API-режим: Введено команду
rails new app --api
, що дозволяє створювати легковагові додатки, орієнтовані тільки на API, у відповідь на бурхливе зростання мобільних і односторінкових додатків.
2. ActionCable: Інтеграція підтримки WebSocket для додавання реальних функцій, таких як передача даних в реальному часі та чат, що стало необхідним через зростаючий попит на ці можливості.
3.`
**API для атрибутів ActiveRecord (ActiveRecord Attributes API): Дозволив налаштовувати поведінку та типи атрибутів, підвищуючи гнучкість ActiveRecord.
4. Turbolinks 5: Розширено підтримку для мобільних додатків, зменшуючи час завантаження та покращуючи мобільну розробку.
5. Перейменування контролерів: РозділилиApplicationController
наAPIController
таBaseController
для спрощення розробки API.
- Помітні методи/функції:
Покращені хук-методи
after_commit
таafter_rollback
для точнішого контролю за транзакціями бази даних.Команда
rails db:setup
спростила налаштування бази даних, створюючи схему та заповнюючи її даними за одну команду.
Хоча Rails 5 ввів API-режим, багато додатків все ще стикалися з проблемами у розділенні монолітних структур, що призводило до проблем з продуктивністю у великих додатках. Незважаючи на введення ActionCable, підтримка WebSockets у реальному часі призводила до складнощів зі масштабуванням і розгортанням, а відсутність єдиного способу управління чергами фонових завдань викликала непослідовність і залежність від кількох гемів. Це стало причиною появи Rails 6.
Rails 6 (2019): Продуктивність та Масштабованість
Rails 6 зосередився на підвищенні продуктивності розробників та масштабуванню, щоб забезпечити здатність додатків на Rails витримувати сучасні вимоги.
- Ключові зміни:
1. ActionText: Введено для роботи з вмістом багатого тексту, що вирішувало потребу в інтегрованому та зручному редагуванні тексту.
2. Підтримка кількох баз даних: Додано рідну підтримку кількох баз даних, оскільки додатки потребували горизонтального масштабування.
3. Паралельне тестування: Зменшено час виконання тестів завдяки паралельному запуску тестів, що відповідає потребі у швидших циклах розробки.
4. Webpacker за замовчуванням: Перехід до управління JavaScript через Webpack, щоб відповідати сучасним інструментам для фронтенду.
5. ActionMailbox: Дозволив обробляти вхідні електронні листи безпосередньо в моделях Rails, спрощуючи робочі процеси з електронною поштою.
- Помітні методи/функції:
Метод
has_rich_text
спростив управління багатим текстом.Команда
rails db:system:change
дозволила безперешкодно змінювати двигун бази даних.Покращено продуктивність для асоціацій
has_many :through
.
У Rails 6 Sprockets став повільнішим для великих додатків, що спричинило проблеми з продуктивністю. Webpacker покращив управління активами, але налаштування було складним та схильним до помилок. Оновлення до новіших версій стало важким через проблеми з webpack. Хоча була введена підтримка кількох баз даних, кешування та налаштування продуктивності все ще вимагали значних ручних зусиль.
Rails 7 (2021): Розробка повного стеку та простота
Rails 7 спростив розробку повного стеку, мінімізуючи залежності від JavaScript та просуваючи більш Rails-орієнтований підхід.
Ключові зміни:
1. Import Maps: Відмовилися від Node.js або Webpack для JavaScript, спрощуючи управління фронтенд-активами.
2. Інтеграція Hotwire: Привнесли Turbo та Stimulus на передній план, сприяючи мінімальному використанню JavaScript для швидших фронтенд-взаємодій.
3. Асинхронні запити: Додано підтримку асинхронних запитів ActiveRecord для обробки довготривалих операцій з базою даних.
4. Zeitwerk за замовчуванням: Покращено автозавантаження, що допомогло усунути проблеми з продуктивністю під час запуску додатка.
5. Оновлення безпеки: Посилено захист від CSRF для зменшення атак.
- Помітні методи/функції:
Команда
config.load_defaults 7.0
спростила оновлення до нових за замовчуванням.Команда
rails new app --css=tailwind
спростила інтеграцію Tailwind CSS.Введено шифрування для чутливих атрибутів ActiveRecord.
До цього часу обробка фонових завдань сильно залежала від Redis, збільшуючи витрати на інфраструктуру та складність, а відсутність вбудованої аутентифікації змушувала використовувати Devise або кастомні реалізації, що збільшувало накладні витрати на проект.
Rails 8 (2024): Ефективність, Простота та Нові Інструменти Розгортання
Rails 8 вводить ряд функцій, що надають пріоритет ефективності розгортання, зменшеним налаштуванням та безперебійній аутентифікації.
- Ключові зміни:
1.`
**Легке розгортання (Effortless Deployments): Інтеграція з Kamal 2 та Thruster спрощує робочі процеси розгортання.
2. Solid Queue для фонових завдань (Solid Queue for Background Jobs): Замінює Redis, дозволяючи Active Job обробляти фонові завдання без залежності від зовнішніх систем.
3. Propshaft Asset Pipeline: Легший варіант Sprockets, що спрощує управління активами.
4. Вбудована аутентифікація (Built-in Authentication): Аутентифікація "з коробки", що зменшує залежність від зовнішніх гемів, таких як Devise.
5. Папка скриптів і генератор (Script Folder and Generator): Нова директоріяscript
для організації кастомних скриптів та спрощений генератор для швидшого створення шаблонного коду.
- Помітні методи/функції:
Метод
authenticate
безпосередньо в контролерах для обробки сесій.
Командаdeploy
для безперебійного розгортання.
Методpropshaft.append_path
для налаштування управління активами.
Чоловік, що чекає, аби розкрити містичний світ Rails, потужний завдяки AI
Висновок
Rails пройшов шлях від простого веб-фреймворку до потужного, масштабованого рішення для сучасних веб-додатків. Кожна версія відображає еволюцію потреб розробників і технологічного ландшафту. Незалежно від того, чи підтримуєте ви старий додаток на Rails 3, чи починаєте з нуля на Rails 7, розуміння цього шляху допомагає створювати кращі, швидші та безпечніші додатки. Крім того, майбутнє Rails вказує на розробку з використанням AI та новітні технології, такі як WebAssembly, які продовжують інновувати і спрощувати робочі процеси. Тож стежте за останніми оновленнями.
Для посилань, відвідайте wikipedia, rails-guides, rails.
Ви можете слідкувати за мною:
- LinkedIn: https://www.linkedin.com/in/samvita-karkal-354628168/
- X / Twitter: https://x.com/karkalsamvita
- Peerlist: https://peerlist.io/samvitak
Я тут, щоб зробити спільноту сильнішою, ділячись знаннями. Слідуйте за мною та моєю командою, щоб бути в курсі останніх новинок у світі веб- та мобільних технологій.
Перекладено з: Rails Through the Years: Key Changes from Version 1 to 8