Обещал рассказать, как прошло. Два сервиса, оба были на 7.0.8 и Ruby 3.2, команда шесть человек, на всё ушло полторы недели вместе с ревью. Что всплыло:
- Rails.application.secrets теперь сыпет предупреждение, через него читались два старых ключа, перенесли в credentials;
- Rails.logger стал BroadcastLogger, и наш самописный вывод в stdout через ActiveSupport::Logger.broadcast просто упал при старте;
- после app:update в test.rb появился raise_on_missing_callback_actions, и вылезли три before_action only: :update там, где экшена update давно нет;
- alias_attribute на метод, который не колонка, теперь устаревший, нашли два таких места.
load_defaults пока оставили 7.0, новые дефолты включаем по одному из new_framework_defaults_7_1.rb. Следующий шаг формат кеша, его боюсь больше всего.
С форматом кеша и правда аккуратнее всего. cache_format_version = 7.1 нельзя включать в той же выкладке, что и сам 7.1: пока на проде часть процессов ещё на старом коде, они новый формат не прочитают. Сначала выкатываете 7.1 со старым форматом, ждёте, пока всё устоится, и только следующим релизом переключаете. И кеш после этого прогревается заново, пару часов в базу будет ходить больше запросов. Ещё проверьте, кто кроме вас читает этот кеш: если рядом живёт сервис на старом Rails и ходит в тот же Redis, он тоже споткнётся.
А new_framework_defaults_7_1.rb откуда берётся? Я пока на курсах, и когда создаёшь приложение сразу на 7.1, такого файла нет
Если нужен вывод ещё и в stdout, в 7.1 это Rails.logger.broadcast_to(ActiveSupport::Logger.new($stdout)). Ловил то же самое, только в инициализаторе для Sidekiq, нашёл не сразу, потому что падало уже в воркере, а веб стартовал нормально.
Время набора тестов до и после принесёте? Интересно, сдвинулось ли что-то, у меня на 7.1 разница была в пределах секунды