Rails 7 (RC1)

И так,  6 декабря 2021 года представлен релиз-кандидат Rails 7. И команда разработки готова в скором времени готова объявить о завершении работы над новой версией Rails 7. С момента альфа версии было исправлено множество проблем.

Если все пойдет по плану, то мы увидим финальный релиз Rails 7 уже в этом, 2021 году.

Frontend

Около пяти лет для работы с JavaScript использовался Webpacker. Теперь настало время двигаться дальше. Стимулом для перехода стали лучшая поддержка браузерами ES6/ESM, широкого внедрения HTTP/2.

Вместе с заменой Turbolinks и Rails UJS на Hotwire и Turbo, теперь будет доступна новая конфигурация для написания современных приложений на Rails. Как обещается, без тысяч зависимостей в node_modules и борьбы с конфигурацией сборщика.

В то же время улучшена интеграция между Rails и сборщиками JavaScript+CSS, если это необходимо. Созданы два новых гема - jsbundling-rails и cssbundling-rails, с ними вы получаете легкий доступ к использованию esbuild, rollup.js, webpack, tailwind, postcss, dart-sass и bootstrap.

Шифрование ActiveRecord

В ActiveRecord добавлено шифрование атрибутов. На практике это добавляет дополнительный уровень безопасности при работе с конфиденциальными данными. Например, если злодей получил доступ к базе данных, её резервной копии или журналу приложения, он не сможет использовать зашифрованную информацию. Если не говорить о взломах, то даже при санкционированном доступе к просмотру  журналов приложения, конфиденциальная и личная информация клиентов должна быть скрыта.

Важно, что с помощью Active Record Encryption на уровне кода определяется какая информация может считаться конфиденциальной. Это позволяет контролировать доступ и создавать службы.

Отслеживание запросов с использованием тегов

Пакет Marginalia добавлен в ActiveRecord как QueryLogs.

Асинхронные запросы

Если в действии контроллера необходимо выполнить два несвязанных запроса, теперь можно сделать это одновременно с Realtaion#load_async. Теперь запросы можно выполнять параллельно.

Zeitwerk

Zeitwerk теперь является исключительным методом автозагрузки. Это может вызвать проблемы в работе старых приложений. Руководство по обновлению.

Что еще

  • Spring больше не включен по умолчанию. Он больше не актуален для современных быстрых компьютеров, разве что только для самых больших приложений
  • ActionController::Live#send_stream упрощает потоковую передачу файлов
  • При параллельном тестировании будет сравниваться количество ядер CPU с количеством тестов и масштабировать выполнение.
  • ActiveStorage по-умолчанию использует libvips