Rails 8: создание веб-приложений быстрее и проще, чем когда-либо

· SecurityLab.ru · Подписаться

Kamal 2, Propshaft и прокачанные адаптеры: что еще предлагает новая версия фреймворка?

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

Интеграция с Kamal 2

Одним из ключевых улучшений стала интеграция с Kamal 2 - инструментом, который упрощает процесс развертывания приложений. Разработчики теперь смогут разворачивать свои проекты на облачных виртуальных машинах, физических серверах или VPS за считанные минуты. Достаточно выполнить одну команду - kamal setup, чтобы настроить среду, готовую к использованию. Эта функция также позволяет сэкономить на использовании управляемых облачных сервисов и PaaS-платформ.

Kamal 2 работает в связке с Thruster - специальным прокси-сервером, созданным специально для Rails. Он обеспечивает развертывание без простоев, поддержку HTTP/2, автоматическое получение SSL-сертификатов через Let's Encrypt, сжатие Gzip и возможность размещения нескольких приложений на одном сервере. При этом настройка остается простой и не требует сложных манипуляций.

Те, кто предпочитает использовать собственные методы развертывания, могут отказаться от Kamal 2 с помощью флага --skip-kamal.

Компактные развертывания с адаптерами Solid

Rails 8 также предлагает более компактные развертывания благодаря новым адаптерам Solid. Теперь многие задачи, для которых раньше требовалось использование Redis вместе с основной базой данных, можно выполнять с помощью SQLite.

Три новых адаптера - Solid Cable, Solid Cache и Solid Queue - позволяют обходиться без дополнительных сервисов для реализации очередей задач, кэширования и обмена сообщениями. Solid Cable стал новым адаптером по умолчанию для Action Cable в среде разработки. Он обеспечивает передачу сообщений между приложением и подключенными клиентами, используя быстрый опрос через SQLite.

Solid Cache заменяет Redis для кэширования. Вместо оперативной памяти здесь применяется дисковое хранилище. С таким подходом можно создавать более объемные и экономичные кэши, которые сохраняются дольше и обрабатывают больше запросов без потери производительности.

Solid Queue приходит на смену Redis для обработки фоновых задач Active Job. Он использует механизм FOR UPDATE SKIP LOCKED и совместим с PostgreSQL, MySQL и SQLite. Адаптер включает множество важных функций: например, контроль параллельности, повторные попытки и повторяющиеся операции. Его эффективность уже доказана на практике - в сервисе HEY система ежедневно обрабатывает 20 миллионов задач.

Идея, лежащая в основе этих адаптеров, проста: современные SSD и NVMe-накопители достаточно быстры, чтобы справляться со многими задачами, для которых раньше требовалась оперативная память. Используя возможности быстрых накопителей, Rails избавляется от необходимости в отдельных инструментах, работающих в RAM.

Ключевые улучшения интеграции с SQLite в Rails 8:

  • Добавлена поддержка полнотекстового поиска и виртуальных таблиц с помощью create_virtual_table.
  • Адаптер теперь позволяет выполнять массовую вставку фикстур для повышения производительности при заполнении данными.
  • Транзакции по умолчанию работают в режиме IMMEDIATE для улучшения параллельной обработки.
  • Улучшена обработка ошибок путем преобразования SQLite3::BusyException в ActiveRecord::StatementTimeout.

Propshaft - новый стандартный конвейер ресурсов

Rails 8 также вводит Propshaft в качестве нового стандартного конвейера ресурсов вместо давно используемой системы Sprockets. Это более простой, современный подход к управлению, построенный вокруг основных потребностей современных разработчиков. Цель программы проста: обеспечить четкий путь для ресурсов и применить дайджест-штампы для кэширования.

В отличие от Sprockets, который выполнял множество дополнительных задач, Propshaft фокусируется только на самом необходимом и органично вписывается в новую философию Rails по поддержанию конвейеров ресурсов легкими (в то время как сложную обработку JavaScript оставили в специализированных инструментах вроде Esbuild или Vite).

Упрощенная встроенная аутентификация

Rails 8 также предлагает упрощенную встроенную аутентификацию. На протяжении нескольких версий разработчики постепенно добавляли ключевые компоненты: от has_secure_password в Rails 5 до normalizes, generates_token_for и authenticate_by в Rails 7.1., чтобы в итоге предоставить простую отправную точку для создания безопасной системы аутентификации на основе сессий.

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

bin/rails generate authentication

Эта команда генерирует ключевые файлы, включая модели, контроллеры, почтовые рассылки и представления:

app/models/current.rb
app/models/user.rb
app/models/session.rb
app/controllers/sessions_controller.rb
app/controllers/passwords_controller.rb
app/mailers/passwords_mailer.rb
app/views/sessions/new.html.erb
app/views/passwords/new.html.erb
app/views/passwords/edit.html.erb
app/views/passwords_mailer/reset.html.erb
app/views/passwords_mailer/reset.text.erb
db/migrate/xxxxxxx_create_users.rb
db/migrate/xxxxxxx_create_sessions.rb
test/mailers/previews/passwords_mailer_preview.rb

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

Новая папка script

В Rails 8 появилась новая папка script, предназначенная для хранения разовых или общих скриптов. Дополнение помогает аккуратно организовать элементы, отделив их от основной логики приложения.

Для упрощения создания скриптов доступен новый генератор. Разработчики могут создавать скрипты с помощью простой команды:

bin/rails generate script my_script

Эти команды создают соответствующие файлы, которые затем можно выполнить с помощью:

bundle exec ruby script/my_script.rb

Улучшения Active Record

Active Record также получил значительные улучшения в Rails 8. Вот некоторые из них:

  • Rails 8 теперь различает float4 и float8 в PostgreSQL.
  • drop_table теперь поддерживает удаление нескольких таблиц одновременно.
  • Добавлена поддержка наследования таблиц PostgreSQL и нативного разделения.
  • Поддерживается массовая вставка фикстур для повышения производительности при заполнении данными.
  • Миграция свежей базы данных теперь начинается с загрузки схемы базы данных перед выполнением миграций.
  • Операции create_schema и drop_schema теперь обратимы.
  • Rails 8 теперь требует MySQL 5.6.4 или выше из-за улучшений, таких как datetime с точностью.
  • Теги журнала запросов включены по умолчанию в средах разработки для отслеживания SQL-запросов обратно к коду приложения и определения используемой базы данных.

Итак, Rails 8 вводит ряд интересных обновлений: от упрощенного развертывания с Kamal и современного конвейера ресурсов до существенных улучшений ActiveRecord и расширенных возможностей SQLite. Нововведения повысят продуктивность разработчиков и позволят сосредоточиться непосредственно на создании приложения, а не на решении инфраструктурных сложностей.