Заявка на декабрьскую встречу, 15 минут. Мы начали переводить основной сервис с 8.0 на 8.1 ещё с беты, а через неделю после релиза выкатили на прод, всего вышло два спринта вместе с ревью. Что расскажу: как сначала довели deprecation-предупреждения на 8.0 до нуля и только потом меняли версию, какой gem для пагинации пришлось ждать неделю, почему первый же db:migrate перегенерировал schema.rb с колонками по алфавиту и дал диф на три тысячи строк. И отдельно про продолжения в Active Job, ради них и затевали обновление: импорт заказов теперь переживает деплой посреди работы и продолжает с того места, где остановился.
class ImportOrdersJob < ApplicationJob
include ActiveJob::Continuable
def perform(import_id)
import = Import.find(import_id)
step :download do
import.download!
end
step :process do |step|
import.rows.find_each(start: step.cursor) do |row|
Orders::Upsert.call(row)
step.advance! from: row.id
end
end
end
end
Порядок шагов брали из гайда по обновлению: https://guides.rubyonrails.org/upgrading_ruby_on_rails.html
Про schema.rb с колонками по алфавиту обязательно пару минут: многие увидят этот диф в первом же PR и испугаются, что миграция что-то поломала. И я бы послушал, как вы проверяли, что импорт действительно продолжается после деплоя, а не начинается заново.
Continuations уже на проде или пока на стейдже? Интересно, как ведёт себя шаг, если воркер убили не по сигналу, а по памяти
Для старых проектов это пока фантастика, там бы до 7.2 доползти. Но послушаю: хочу понять, сколько закладывать в оценку на мажорное обновление, когда тесты нормальные. Обычно называют неделю на версию, а выходит две.