Привет, Ruby Folkes, это я, Саджад Умар, ваш личный дези-разработчик, приношу интересные новости из мира #rubyonrails.

🎉🎉🎉🎉🎉🎉🎉

Теперь наша семья насчитывает более 2000 подписчиков в LinkedIn. Мне потребовалось 10 месяцев, чтобы достичь этого рубежа.

Я очень рад, что этот бесплатный для всех #newsletter помогает сообществу #rails быть в курсе всех последних событий, происходящих в Ruby on Рельсовый мир. Спасибо за чтение и подписку.

Ruby on Rails — Monthly теперь также доступен на Substack. Если вы хотите помочь мне сохранить эту рассылку бесплатной для всего сообщества (навсегда), подумайте о том, чтобы стать платной подпиской.

Небольшое количество платных подписчиков может помочь мне сделать эту рассылку бесплатной для всего сообщества (навсегда) — Подпишитесь сейчас!

Давайте перейдем к обновлениям этого месяца.

Руби исполнилось 30 🎂 🎉

Сообщество Ruby по всему миру отмечает 30-летие Ruby.

Все подробности читайте здесь.

Аманда Перино — исполнительный директор The Rails Foundation

Пожалуйста, поприветствуйте Аманду Перино на посту руководителя нашей миссии по улучшению документации, обучения, маркетинга и мероприятий в экосистеме Rails.

Узнайте все подробности здесь.

Турбо v7.3.0 — Выпущено!

Выпущена версия Turbo v7.3.0.

Все подробности читайте здесь.

Добавлена ​​задача rake в javascript руководства поставщика.

Руководства Rails были перенесены из Turbolinks в Turbo, поэтому этот коммит добавляет задачу rake для автоматизации процесса захвата файла turbo js с использованием Importmap::Packager, который importmap-rails использует для bin/importmap pin --download..

Все подробности читайте здесь.

Associations::Preloader теперь поддерживает предварительную загрузку ассоциаций с составными ключами

Этот PR добавляет поддержку Associations::Preloader, чтобы иметь возможность предварительно загружать ассоциации, связанные с составным внешним ключом (query_constraints), и косвенно добавлять поддержку отношений includes().

Все подробности читайте здесь.

Теперь вы можете указать пропускать дедупликацию с помощью SchemaCache#init_with skip deduplicate.

Это очень продвинутый API для тех, кто использует собственный сериализатор Schema Cache.

Пользовательский сериализатор может уже выполнить дедупликацию данных, и в этом случае повторная дедупликация будет очень расточительной.

Все подробности читайте здесь.

Имя пользователя Dockerfile изменено с обычного `appuser` на `rails`

Несмотря на то, что это небольшая деталь, она позволяет всем, кто использует этот контейнер, знать, что они находятся в образе «rails», а не в общем «appuser», который может конфликтовать с другими изображениями.

Все подробности читайте здесь.

Удаленные авторские права лет

Этот PR избавляется от лет и дат авторского права на всех лицензиях. Они не служат никакой реальной цели и нуждаются в пиаре, чтобы обновлять их каждый год.

Ну, не больше!

Все подробности читайте здесь.

Руководство по шаблонам приложений Rails теперь будет легко доступно

До этого изменения было очень трудно найти руководство по Rails по `Шаблоны приложений Rails`. Теперь это было добавлено в указатель RialsGuides, чтобы его можно было легко найти.

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

Все подробности читайте здесь.

Теперь вы можете ставить в очередь несколько заданий одновременно с помощью ActiveJob.perform_all_later

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

Все подробности читайте здесь.

Добавлены config.hosts и config.host_authorization в новые шаблоны приложений.

В Rails есть конечная точка по умолчанию '/up', которая помогает балансировщикам нагрузки и мониторам безотказной работы. Перепривязки DNS иногда мешают этому. Добавление настроек для hosts и host_authorization теперь поможет уменьшить это трение.

Все подробности читайте здесь.

Изменения в поведении YAML спирализаторов по умолчанию

YAML отлично подходит для настройки и тому подобного, но для сериализации произвольных данных у него много проблем, как с точки зрения производительности и эффективности, так и с точки зрения безопасности.

Этот запрос на включение (дополнение к этому PR) отбрасывает значение по умолчанию для новых приложений.

Все подробности читайте здесь.

database.yml теперь поддерживает общие трехуровневые конфигурации.

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

Все подробности читайте здесь.

Теперь вы можете настроить имя очереди deliver_later для классов Mailer.

deliver_later_queue_name уже настраивается на ActionMailer::Base, однако это значение наследуется всеми подклассами. Вместо этого этот PR использует атрибут class-inheritable, чтобы подклассы могли переопределять его.

Все подробности читайте здесь.

Предупреждения парсера почты теперь подавляются, пока мы не исправим

Раньше требование любого из ragel-generated parsers в почте приводило к выводу множества предупреждений в тестах, что делало вывод намного труднее для чтения (особенно в Railties).

Этот PR расширяет исправление RaiseWarnings для подавления вывода этих анализаторов почты.

Все подробности читайте здесь.

Стойка 3 теперь использует заголовки в нижнем регистре в ActionDispatch::Static

ActionDispatch::Staticиспользует заголовки в смешанном регистре и объединяет их с заголовками в нижнем регистре. Это приводит к дублированию заголовков. Этот PR изменяет заголовки на нижний регистр, чтобы избежать этой ситуации.

Все подробности читайте здесь.

Теперь вы можете настроить алгоритм дайджеста в ActiveRecord Encryption

Это добавляет новый параметр для настройки алгоритма дайджеста в ActiveRecord Encryption. Он устанавливает SHA-256 в качестве нового значения по умолчанию, начиная с 7.1, и SHA-1 для предыдущих версий.

Все подробности читайте здесь.

Добавлена ​​тень на rails new загрузочный экран.

При беглом взгляде было не очень понятно, что логотип Rails на загрузочном экране кликабельный, этот PR добавляет к логотипу тень, чтобы он был более заметен.

Все подробности читайте здесь.

dartsass-rails теперь будет устанавливаться автоматически при создании приложения с помощью sass.

Если вы используете команду "--css sass" при создании нового приложения, Gemfile теперь будет включать гем dartsass-rails, а команда "dartsass:install" будет выполняться автоматически.

Все подробности читайте здесь.

Удалена зависимость пакета Redis в Dockerfile.

Ни один из клиентов Ruby Redis не нуждается в этом пакете. Поэтому он был удален как зависимость.

Все подробности читайте здесь.

x86_64-linux ИЛИ aarch64-linux платформы теперь будут устанавливаться автоматически

Команда «bundle install» при создании приложения Rails теперь автоматически настраивает платформы по умолчанию на x86_64-linux (или aarch64-linux на Mac).

Все подробности читайте здесь.

ActiveRecord теперь поддерживает назначения для составных ключей has_many through ассоциаций.

Этот PR добавляет поддержку назначения has_many :items, through: :items_source ассоциаций, использующих составную query_constraints конфигурацию.

Все подробности читайте здесь.

Исправлена ​​аннулирующая связь с составными ограничениями запроса.

Сделав это изменение, можно аннулировать ассоциации обоих blog_post.comments = [] and comment.blog_post = nil.. Это, в свою очередь, приведет к аннулированию всех ограничений составного запроса, тем самым делая blog_id и blog_post_id ноль для комментариев, которые затронутый.

Все подробности читайте здесь.

Добавлен флаг –frozen-lockfile в Dockerfile, чтобы избежать непреднамеренных изменений версии.

Подобно BUNDLE_DEPLOYMENT, этот флаг гарантирует, что ни один пакет не будет обновлен или понижен в версии lockfile.

Все подробности читайте здесь.

Драгоценный камень debug был удален из Gemfile по умолчанию из-за ошибки.

Из-за ошибки в встроенном отладочном геме Ruby он был временно удален из сгенерированного Gemfile, чтобы исправить генерацию приложений из файла main.

Все подробности читайте здесь.

Приложения теперь могут регистрировать пользовательские конфигурации базы данных.

Раньше приложения могли иметь только два типа объектов конфигурации базы данных: HashConfig и UrlConfig. Это означало, что если вы хотите, чтобы ваша конфигурация реализовывала пользовательские методы, вам нужно было исправлять DatabaseConfigurations обезьяны, чтобы учитывать пользовательский класс. Этот PR позволяет приложениям регистрировать пользовательский обработчик db_config, чтобы пользовательские конфигурации могли реагировать на необходимые методы. Это особенно полезно для таких инструментов, как Vitess, где мы можем захотеть указать, что он сегментирован, но не дать Rails прямого доступа к этим знаниям.

Все подробности читайте здесь.

configs_for теперь принимает пользовательский хеш-ключ

Это изменение добавляет параметр config_key в configs_for для поиска db конфигураций, где configuration_hash содержит определенный ключ.

Все подробности читайте здесь.

Зачем становиться платным подписчиком?

Платная подписка на ежемесячную рассылку Ruby on Rails – отличный способ поддержать сообщество. Оформив подписку всего за 5 долл. США в месяц (или 50 долл. США в год), вы сможете сохранить ее бесплатной для всех в долгосрочной перспективе. В качестве альтернативы, если вы не можете позволить себе подписку, вы все равно можете помочь, поделившись новостной рассылкой в ​​своем кругу, чтобы они могли ее поддержать.

Стать подписчиком Substack

Реализовано Object#with

Очень распространенный шаблон в Ruby, особенно при тестировании, состоит в том, чтобы сохранить значение атрибута, установить новое значение, а затем восстановить старое значение в предложении обеспечения.

Этот PR Object#with устанавливает и восстанавливает общедоступные атрибуты вокруг блока.

Все подробности читайте здесь.

irb не является зависимостью railties

Этот PR добавляет irb к зависимостям railties по следующим причинам:

  • Во-первых, включение irb в качестве зависимости позволяет пользователям со старыми версиями Ruby пользоваться преимуществами последней версии irb вместо того, чтобы ограничиваться версией, связанной с их установкой Ruby.
  • Кроме того, продолжается обсуждение переноса irb на составные драгоценные камни. Если это изменение будет реализовано, пользователям может потребоваться объявить irb в своем Gemfile, чтобы использовать его для консоли Rails. Добавляя irb в качестве зависимости, пользователи могут избежать дополнительных усилий по ручному указанию irb в своих Gemfile.

Все подробности читайте здесь.

Приложение Lockdown rails в производстве для обеспечения безопасности

Dockerfile, сгенерированный Rails, в настоящее время работает с использованием пользователя non-root, тем самым ограничивая изменения в операционной системе, но оставляя уязвимыми все гемы и приложение. Чтобы решить эту проблему, этот PR заблокирует гемы приложений и предоставит доступ только к определенным каталогам, таким как db, log, storage, and tmp..

Все подробности читайте здесь.

Улучшена поддержка пользовательских пространств имен.

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

Все подробности читайте здесь.

Улучшения в сообщении об ошибке ActiveModel::MissingAttributeError

Ранее при отсутствующем атрибуте сообщение об ошибке не указывало четко, в каком классе отсутствовал атрибут, особенно в ситуациях, когда можно было затронуть несколько классов. Чтобы упростить отладку, этот PR добавляет имя класса в сообщение об ошибке.

Все подробности читайте здесь.

Расширенный has_secure_password для создания метода password_salt.

Это изменение вводит новую функцию, где has_secure_password генерирует метод с именем #{attribute}_salt, который можно использовать для извлечения соли, используемой для вычисления дайджеста пароля. Поскольку соль меняется каждый раз при обновлении пароля, ее можно использовать для создания одноразовых токенов сброса пароля с помощью generates_token_for.

Все подробности читайте здесь.

Поиск маршрута Rails был расширен на все содержимое таблицы.

Этот PR расширяет поле поиска на странице rails/info/routes для поиска:

  • Название маршрута (с расширением _path и _url или без него)
  • HTTP-глагол (например, GET/POST/PUT и т. д.)
  • Controller#Action

потому что не было очевидно, что поле поиска было ограничено только путями маршрута.

Все подробности читайте здесь.

DelayedJob display_name теперь отказоустойчивый

Система отложенных заданий использует метод display_name для регистрации подробностей, таких как сообщения об ошибках. Однако если класс задания перемещается или удаляется, запланированные экземпляры больше не могут быть постоянными, что приводит к тому, что метод display_name выдает исключение, которое в некоторых случаях может завершить весь отложенный обработчик задания. Чтобы решить эту проблему, этот PR гарантирует, что рабочий процесс может корректно обрабатывать неудачные задания и продолжать работу, а также обеспечивает соответствующий вывод журнала.

Все подробности читайте здесь.

PostgreSQL add_index теперь поддерживает как include, так и where

Недавнее обновление PostgreSQL представило поддержку параметра include при создании индекса. Однако при использовании вместе с параметром where сегменты INCLUDE и WHERE располагались в неправильном порядке, что приводило к ошибкам переноса. Этот PR устраняет эту проблему, изменяя порядок сегментов INCLUDE и WHERE во время создания индекса, чтобы гарантировать правильность запроса. Кроме того, он также обновляет ожидаемый порядок сегментов в операторе создания индекса при сбросе схемы.

Все подробности читайте здесь.

Дези-разработчик (некоторые обновления)

Начал новую короткую серию, чтобы объяснить особенности языка Ruby, чтобы люди могли изучать Ruby, просматривая короткие клипы. Это может заставить новых разработчиков влюбиться в рубин.



Desi Developer теперь также есть в TikTok — Подпишитесь на интересный Ruby-контент.

Дополнительные способы поддержки

  1. Следите за мной в среде, где я делюсь своим приключением по запуску настоящего стартапа с нуля.
  2. Купи мне Ко-Фай (https://ko-fi.com/sumar7)
  3. Поделитесь этой новостью со своими друзьями Ruby
  4. Станьте платным подписчиком на Substack
  5. Покупайте в официальном мерче Desi Developer (https://www.desidev.shop)

Небольшой вопрос, прежде чем вы уйдете: вам нравится читать этот информационный бюллетень? Представляет ли это какую-либо ценность? Отзывы в комментариях будут очень ценны, так как они помогут мне стать лучше.

До новых встреч ✌️