Рекомендуем
VPS на Windows и Linux — от 49 ₽ за 7 дней Быстрый запуск сервера на NVMe для сайтов, ботов и других задач.
Выбрать VPS

Ruby on Rails 8.1.4 — исправлены взаимные блокировки MySQL, ошибки кеширования и обработки данных

24 сентября 2026 года вышел Ruby on Rails 8.1.4. Обновление устраняет взаимные блокировки при конкурентном создании записей в MySQL, исправляет работу составных ключей, кеша и сериализации данных, а также ограничивает обработку чрезмерно длинных числовых строк.

Ruby on Rails 8.1.4
Ruby on Rails 8.1.4

Параллельное создание записей в MySQL больше не приводит к прежней взаимной блокировке

Представим, что два запроса одновременно пытаются создать одну и ту же запись. Раньше в определённых условиях find_or_create_by мог приводить к взаимной блокировке транзакций MySQL. В Rails 8.1.4 чтение после конфликта вставки использует разделяемую блокировку. Изменение затрагивает также create_or_find_by и варианты обоих методов с восклицательным знаком.

Исправление касается сценариев с конкурентными операциями при уровне изоляции REPEATABLE READ. Оно не отменяет необходимость уникальных ограничений и обработки других возможных конфликтов транзакций.

Active Record точнее работает с составными ключами и подключениями

В версии 8.1.4 исправлены несколько ошибок моделей с составными первичными и внешними ключами. Rails теперь отслеживает изменения всех столбцов составного внешнего ключа в belongs_to, корректнее предварительно загружает связи и обрабатывает удаление по составному идентификатору. Исправления затронули и проверку обязательных связей.

Отдельная группа изменений касается пула соединений. Устранены утечка соединения в ActiveRecord::TypeCaster::Connection, гонка между preconnect и фоновым обслуживанием пула и ситуация, когда ожидание соединения превышало настроенный checkout_timeout. В сообщениях об ошибках задач db: теперь скрывается пароль базы данных.

Active Support исправляет кеш, JSON и форматирование чисел

При включённом локальном кеше fetch_multi теперь сохраняет порядок ключей, заданный вызывающим кодом. RedisCacheStore дополнительно обрабатывает ошибки RedisClient::Error, которые в отдельных конфигурациях, включая Redis Sentinel, могли обходить прежнюю защитную обработку.

ActiveSupport::JSON.decode адаптирован к готовящейся библиотеке json 3.0. Функция number_to_human_size получила поддержку петабайтов, эксабайтов и зеттабайтов. Исправлены потеря дробной части при преобразовании продолжительности и несколько случаев неожиданного изменения переданных вызывающим кодом строк, массивов и хешей.

Обработка длинных числовых строк получила ограничение

ActiveModel::Type::Integer теперь ограничивает длину строки, которую передаёт на преобразование через to_i. Раньше обработка чрезвычайно длинного ввода могла потреблять значительное процессорное время и создавать риск отказа в обслуживании. Для стандартного четырёхбайтового целого учитываются первые 16 байт, для восьмибайтового — 32 байта. Это изменение описано разработчиками как защита от потенциального вектора DoS; отдельный идентификатор CVE в примечании к этому исправлению не указан.

Версия 8.1.4 уже доступна в RubyGems

Релиз опубликован 24 сентября 2026 года. Для пакета rails указано требование Ruby 3.2 или новее. Официальное объявление содержит SHA-256 для выпущенных gem-пакетов, а подробный список изменений опубликован в репозитории проекта. В отличие от предыдущего выпуска 8.1.3.1, посвящённого исправлению уязвимости Active Storage, версия 8.1.4 объединяет большой набор исправлений поведения разных компонентов Rails.

Официальные материалы: объявление Rails, подробный список изменений, пакет в RubyGems.

При использовании материалов сайта необходимо указывать ссылку на TGLand.ru. Если вы копируете фрагменты текста в интернете, прямая гиперссылка, доступная для индексации поисковыми системами, должна быть размещена в начале материала.

Вам также может понравиться