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

После праздников обновились на Rails 8.1 и Ruby 4.0: заметки

7 Сообщения
6 Пользователи
10 Реакции
481 Просмотры
Давид Г
Сообщения: 7
Автор темы
Разобрался с блоками тимлид
Присоединился: 10 месяцев назад
[#102]

Каждый январь у нас одна традиция: пока задач мало, обновляемся. Монолит на Rails 8.0 и Ruby 3.4, команда из пяти человек, Hotwire и Kafka для событий. В этот раз сделали в два захода, и это было правильно.

Сначала Rails 8.1 на старом Ruby. Почти ничего не сломалось, app:update предложил новый config/ci.rb и bin/ci. Попробовали локальный CI: те же шаги, что в облачном, только гоняются на ноутбуке разработчика перед мержем. Наши 4200 тестов на свежем ноутбуке идут около шести минут, на старом у одного из ребят двенадцать, так что облачный CI пока не выключаем.

Потом Ruby 4.0. Два гема с нативными расширениями не собрались, у обоих уже были свежие версии, обновили. Новый JIT на проде пробовать не стали, он пока экспериментальный, оставили YJIT. Тесты зелёные, неделю на стейдже, в понедельник выкатываем.


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

config/ci.rb я бы сразу подрезал под себя, у генератора шагов многовато. Примерно так:

CI.run do
  step "Setup", "bin/setup --skip-server"
  step "Style: Ruby", "bin/rubocop"
  step "Security: Brakeman", "bin/brakeman --quiet --no-pager"
  step "Tests: Rails", "bin/rails test"
end

Удобно, что это обычный Ruby: можно добавить условие и не гонять системные тесты, если менялся только бэкенд.


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

Цифры по Ruby 4.0 принесёте? Я мерил на синтетике и на одном API: YJIT на 4.0 против 3.4 в пределах 2-3 процентов по p50, почти шум. Новый JIT на том же API пока заметно медленнее YJIT, так что не трогать его на проде правильно.


Ответ
p.safonov
Сообщения: 3
Пишет в irb техлид
Присоединился: 10 месяцев назад

а has_many ... deprecated: true из 8.1 кто-нибудь уже пробовал? Выглядит полезно для чистки старых связей


Ответ
1 ответ
chaika
Присоединился: 10 месяцев назад

Пишет в irb техдир небольшой студии
Сообщения: 4

Пробовал. Помечаешь связь, и при каждом обращении к ней в лог пишется предупреждение со стеком, а в тестах можно включить режим, чтобы падало. За неделю на стейдже видно, кто ещё ходит в старую связь. Удобнее, чем грепать по коду: ловит и вызовы через public_send.


Ответ
Давид Г
Сообщения: 7
Автор темы
Разобрался с блоками тимлид
Присоединился: 10 месяцев назад

Цифры с прода принесу через неделю. По тестам набор на Ruby 4.0 идёт на 4% быстрее, но это может быть и шум. За deprecated в связях спасибо, у нас как раз три старые связи висят со времён первой версии, пометим и посмотрим, кто в них ходит.


Ответ
Егор64
Сообщения: 30
Читает чужие PR тимлид
Присоединился: 3 года назад

Два захода, сначала Rails, потом Ruby, это правильно. Когда всё сразу, потом не понять, кто виноват


Ответ