Заметки о релизе Ruby on Rails 8.0

Ключевые новинки в Rails 8.0:

Ключевые новинки в Rails 8.0:

  • Kamal 2.
  • Thruster.
  • Solid Cable.
  • Solid Cache.
  • Propshaft по умолчанию.
  • Генератор системы аутентификации.

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


Апгрейд до Rails 8.0

Прежде чем апгрейднуть существующее приложение, было бы хорошо иметь перед этим покрытие тестами. Также, до попытки обновиться до Rails 8.0, необходимо сначала произвести апгрейд до Rails 7.2 и убедиться, что приложение все еще выполняется так, как нужно. Список вещей, которые нужно выполнить для апгрейда доступен в руководстве Апгрейд Ruby on Rails.

Основные особенности

Kamal 2

Rails теперь поставляется с предварительно настроенным Kamal 2 для развёртывания вашего приложения. Kamal берет свежий Linux-сервер и превращает его в сервер приложения или вспомогательный сервер с помощью всего одной команды «kamal setup».

Kamal 2 также включает прокси Kamal Proxy, заменяющий универсальный Traefik, использовавшийся на старте.

Thruster

Dockerfile был обновлен и теперь включает новый прокси Thruster, который располагается перед веб-сервером Puma и обеспечивает X-Sendfile-ускорение, кэширование ассетов и их сжатие.

Solid Cable

Solid Cable заменяет Redis в роли pubsub-сервера для трансляции WebSocket-сообщений от приложения клиентам, подключенным к разным процессам. По умолчанию Solid Cable сохраняет отправленные сообщения в базе данных в течение суток.

Solid Cache

Solid Cache заменяет, в частности, Redis или Memcached для хранения HTML-фрагментов кэша.

Solid Queue

Solid Queue устраняет необходимость в Redis, а также в отдельном фреймворке выполнения заданий вроде Resque, Delayed Job или Sidekiq.

Для высокопроизводительных установок он построен на новом механизме FOR UPDATE SKIP LOCKED, впервые представленном в PostgreSQL 9.5, но теперь доступном также в MySQL 8.0 и более новых версиях. Он также работает с SQLite.

Propshaft

Propshaft теперь является pipeline ассетов по умолчанию, заменяя старую систему Sprockets.

Аутентификация

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

Railties

За подробностями обратитесь к Changelog.

Удалено

  • Удален устаревший config.read_encrypted_secrets.

  • Удален устаревший файл rails/console/app.

  • Удален устаревший файл rails/console/helpers.

  • Удалена устаревшая поддержка расширения консоли Rails через Rails::ConsoleMethods.

Устарело

  • Устарело требование "rails/console/methods".

  • Устарело изменение STATS_DIRECTORIES в пользу Rails::CodeStatistics.register_directory.

  • Устарел bin/rake stats в пользу bin/rails stats.

Значимые изменения

  • Regexp.timeout установлен в 1s по умолчанию для повышения безопасности от атак Regexp Denial-of-Service.

Action Cable

За подробностями обратитесь к Changelog.

Удалено

Устарело

Значимые изменения

Action Pack

За подробностями обратитесь к Changelog.

Удалено

  • Удален Rails.application.config.action_controller.allow_deprecated_parameters_hash_equality.

Устарело

  • Устарело определение маршрутов с несколькими путями для ускорения роутинга.

Значимые изменения

  • Введён более безопасный и явный метод обработки параметров params#expect, так что params.expect(table: [ :attr ]) заменяет params.require(:table).permit(:attr).

Action View

За подробностями обратитесь к Changelog.

Удалено

  • Удалена устаревшая поддержка передачи nil в аргумент model: метода form_with.

  • Удалена устаревшая поддержка передачи содержимого в void-элементы тегов в tag builder.

Устарело

Значимые изменения

Action Mailer

За подробностями обратитесь к Changelog.

Удалено

Устарело

Значимые изменения

Active Record

За подробностями обратитесь к Changelog.

Удалено

  • Удален устаревший config.active_record.commit_transaction_on_non_local_return.

  • Удален устаревший config.active_record.allow_deprecated_singular_associations_name.

  • Удалена устаревшая поддержка поиска адаптеров баз данных, не зарегистрированных в Active Record.

  • Удалена устаревшая поддержка определения enum с помощью именованных аргументов.

  • Удален устаревший config.active_record.warn_on_records_fetched_greater_than.

  • Удален устаревший config.active_record.sqlite3_deprecated_warning.

  • Удален устаревший ActiveRecord::ConnectionAdapters::ConnectionPool#connection.

  • Удалена устаревшая поддержка передачи имени базы данных в cache_dump_filename.

  • Удалена устаревшая поддержка установки ENV["SCHEMA_CACHE"].

Устарело

  • Устарела опция retries у SQLite3Adapter в пользу timeout.

Значимые изменения

  • Запуск db:migrate на свежей базе данных теперь сначала загружает схему, а затем запускает миграции. Последующие вызовы будут запускать только ожидающие миграции. (Если вам нужно прежнее поведение — запуск миграций с нуля вместо загрузки файла схемы — это можно сделать командой db:migrate:reset, которая удалит и пересоздаст базу данных перед запуском миграций.)

Active Storage

За подробностями обратитесь к Changelog.

Удалено

Устарело

  • Устарел Azure-бэкенд для Active Storage.

Значимые изменения

Active Model

За подробностями обратитесь к Changelog.

Удалено

Устарело

Значимые изменения

Active Support

За подробностями обратитесь к Changelog.

Удалено

  • Удален устаревший ActiveSupport::ProxyObject.

  • Удалена устаревшая поддержка установки attr_internal_naming_format с префиксом @.

  • Удалена устаревшая поддержка передачи массива строк в ActiveSupport::Deprecation#warn.

Устарело

  • Устарел Benchmark.ms.

  • Устарели сложение и since между двумя Time и ActiveSupport::TimeWithZone.

Значимые изменения

Active Job

За подробностями обратитесь к Changelog.

Удалено

  • Удален устаревший config.active_job.use_big_decimal_serializer.

Устарело

  • Устарел enqueue_after_transaction_commit.

  • Устарел внутренний адаптер SuckerPunch в пользу адаптера, включенного в гем sucker_punch.

Значимые изменения

Action Text

За подробностями обратитесь к Changelog.

Удалено

Устарело

Значимые изменения

Action Mailbox

За подробностями обратитесь к Changelog.

Удалено

Устарело

Значимые изменения

Ruby on Rails Guides

За подробностями обратитесь к Changelog.

Значимые изменения

Credits

Взгляните на полный список контрибьюторов Rails, на людей, которые потратили много часов, сделав Rails стабильнее и надёжнее. Спасибо им всем.

On this page