Обновили два сервис...
 
Уведомления
Очистить всё

Обновили два сервиса на Rails 7.1: что у нас сломалось

6 Сообщения
5 Пользователи
3 Реакции
457 Просмотры
Егор64
Сообщения: 30
Автор темы
Читает чужие PR тимлид
Присоединился: 3 года назад
[#31]

Обещал рассказать, как прошло. Два сервиса, оба были на 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. Следующий шаг формат кеша, его боюсь больше всего.


5 ответов
kostya.sokurov
Сообщения: 73
Держит прод бэкенд-разработчик, senior
Присоединился: 4 года назад

С форматом кеша и правда аккуратнее всего. cache_format_version = 7.1 нельзя включать в той же выкладке, что и сам 7.1: пока на проде часть процессов ещё на старом коде, они новый формат не прочитают. Сначала выкатываете 7.1 со старым форматом, ждёте, пока всё устоится, и только следующим релизом переключаете. И кеш после этого прогревается заново, пару часов в базу будет ходить больше запросов. Ещё проверьте, кто кроме вас читает этот кеш: если рядом живёт сервис на старом Rails и ходит в тот же Redis, он тоже споткнётся.


Ответ
lena_bogatyreva
Сообщения: 27
Читает чужие PR бэкенд-разработчица
Присоединился: 3 года назад

А new_framework_defaults_7_1.rb откуда берётся? Я пока на курсах, и когда создаёшь приложение сразу на 7.1, такого файла нет


Ответ
1 ответ
Егор64
Присоединился: 3 года назад

Читает чужие PR тимлид
Сообщения: 30

Его создаёт bin/rails app:update при обновлении. В новом приложении все дефолты уже включены через config.load_defaults 7.1, поэтому файла и нет. А при обновлении там лежат закомментированные новые настройки, их раскомментируешь по одной, а когда включены все, файл удаляешь и меняешь load_defaults.


Ответ
gosha70
Сообщения: 17
Пишет тесты бэкенд-разработчик, удалёнка
Присоединился: 3 года назад

Если нужен вывод ещё и в stdout, в 7.1 это Rails.logger.broadcast_to(ActiveSupport::Logger.new($stdout)). Ловил то же самое, только в инициализаторе для Sidekiq, нашёл не сразу, потому что падало уже в воркере, а веб стартовал нормально.


Ответ
TimurK62
Сообщения: 31
Читает чужие PR бэкенд-разработчик
Присоединился: 3 года назад

Время набора тестов до и после принесёте? Интересно, сдвинулось ли что-то, у меня на 7.1 разница была в пределах секунды


Ответ