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

NewsMaker

I'm just a script
Премиум
13,091
20
8 Ноя 2022
Kamal 2, Propshaft и прокачанные адаптеры: что еще предлагает новая версия фреймворка?


xftfxfx7vkiaczrt4fk12whz8606i85k.jpg


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

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

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

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

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

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

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

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

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

<h2>Ключевые улучшения интеграции с SQLite в Rails 8:</h2>
  • Добавлена поддержка полнотекстового поиска и виртуальных таблиц с помощью <code>create_virtual_table</code>.
  • Адаптер теперь позволяет выполнять массовую вставку фикстур для повышения производительности при заполнении данными.
  • Транзакции по умолчанию работают в режиме <code>IMMEDIATE</code> для улучшения параллельной обработки.
  • Улучшена обработка ошибок путем преобразования <code>SQLite3::BusyException</code> в <code>ActiveRecord::StatementTimeout</code>.
<h2>Propshaft - новый стандартный конвейер ресурсов</h2> Rails 8 также вводит Propshaft в качестве нового стандартного конвейера ресурсов вместо давно используемой системы Sprockets. Это более простой, современный подход к управлению, построенный вокруг основных потребностей современных разработчиков. Цель программы проста: обеспечить четкий путь для ресурсов и применить дайджест-штампы для кэширования.

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

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

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

<pre><code>bin/rails generate authentication</code></pre> Эта команда генерирует ключевые файлы, включая модели, контроллеры, почтовые рассылки и представления:

<pre><code>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</code></pre> Остается только интегрировать процесс регистрации пользователей, настроенный под конкретные нужды приложения.

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

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

<pre><code>bin/rails generate script my_script</code></pre> Эти команды создают соответствующие файлы, которые затем можно выполнить с помощью:

<pre><code>bundle exec ruby script/my_script.rb</code></pre> <h2>Улучшения Active Record</h2> Active Record также получил значительные улучшения в Rails 8. Вот некоторые из них:

  • Rails 8 теперь различает <code>float4</code> и <code>float8</code> в PostgreSQL.
  • <code>drop_table</code> теперь поддерживает удаление нескольких таблиц одновременно.
  • Добавлена поддержка наследования таблиц PostgreSQL и нативного разделения.
  • Поддерживается массовая вставка фикстур для повышения производительности при заполнении данными.
  • Миграция свежей базы данных теперь начинается с загрузки схемы базы данных перед выполнением миграций.
  • Операции <code>create_schema</code> и <code>drop_schema</code> теперь обратимы.
  • Rails 8 теперь требует MySQL 5.6.4 или выше из-за улучшений, таких как <code>datetime</code> с точностью.
  • Теги журнала запросов включены по умолчанию в средах разработки для отслеживания SQL-запросов обратно к коду приложения и определения используемой базы данных.
Итак, Rails 8 вводит ряд интересных обновлений: от упрощенного развертывания с Kamal и современного конвейера ресурсов до существенных улучшений ActiveRecord и расширенных возможностей SQLite. Нововведения повысят продуктивность разработчиков и позволят сосредоточиться непосредственно на создании приложения, а не на решении инфраструктурных сложностей.
 
Источник новости
www.securitylab.ru

Похожие темы