Kamal 2, Propshaft и прокачанные адаптеры: что еще предлагает новая версия фреймворка?
Команда разработчиков Ruby on Rails представила первую бета-версию восьмого поколения популярного веб-фреймворка. Новый релиз привнес множество улучшений и новых возможностей, которые сделают процесс создания веб-приложений еще более эффективным и приятным.
Одним из ключевых улучшений стала интеграция с Kamal 2 - инструментом, который упрощает процесс развертывания приложений. Разработчики теперь смогут разворачивать свои проекты на облачных виртуальных машинах, физических серверах или VPS за считанные минуты. Достаточно выполнить одну команду - kamal setup
, чтобы настроить среду, готовую к использованию. Эта функция также позволяет сэкономить на использовании управляемых облачных сервисов и PaaS-платформ.
Kamal 2 работает в связке с Thruster - специальным прокси-сервером, созданным специально для Rails. Он обеспечивает развертывание без простоев, поддержку HTTP/2, автоматическое получение SSL-сертификатов через Let's Encrypt, сжатие Gzip и возможность размещения нескольких приложений на одном сервере. При этом настройка остается простой и не требует сложных манипуляций.
Те, кто предпочитает использовать собственные методы развертывания, могут отказаться от Kamal 2 с помощью флага --skip-kamal
.
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.
create_virtual_table
.IMMEDIATE
для улучшения параллельной обработки.SQLite3::BusyException
в ActiveRecord::StatementTimeout
.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
Остается только интегрировать процесс регистрации пользователей, настроенный под конкретные нужды приложения.
В Rails 8 появилась новая папка script
, предназначенная для хранения разовых или общих скриптов. Дополнение помогает аккуратно организовать элементы, отделив их от основной логики приложения.
Для упрощения создания скриптов доступен новый генератор. Разработчики могут создавать скрипты с помощью простой команды:
bin/rails generate script my_script
Эти команды создают соответствующие файлы, которые затем можно выполнить с помощью:
bundle exec ruby script/my_script.rb
Active Record также получил значительные улучшения в Rails 8. Вот некоторые из них:
float4
и float8
в PostgreSQL.drop_table
теперь поддерживает удаление нескольких таблиц одновременно.create_schema
и drop_schema
теперь обратимы.datetime
с точностью.Итак, Rails 8 вводит ряд интересных обновлений: от упрощенного развертывания с Kamal и современного конвейера ресурсов до существенных улучшений ActiveRecord и расширенных возможностей SQLite. Нововведения повысят продуктивность разработчиков и позволят сосредоточиться непосредственно на создании приложения, а не на решении инфраструктурных сложностей.
Большой взрыв знаний каждый день в вашем телефоне