Як оновити Ruby для сервісу з 10+ тісно пов'язаними пакетами — без спричинення простоїв?
Задача: Один інтерпретатор Ruby для складного сервісу
Ось в чому справа:
Наш Ruby-сервіс включає понад 10 взаємопов'язаних пакетів. Всі вони працюють разом під єдиним інтерпретатором Ruby 2 в контейнері ECS.
Ми хочемо оновити кожен пакет у системі до Ruby 3, при цьому зберігаючи всю систему працездатною на Ruby 2.
Будь-яка помилка може порушити роботу сервісу.
Нам потрібен був обережний, поетапний підхід.
Поетапний підхід
Ось як ми це зробили:
1. Почати з незалежних пакетів
- Ми почали з утилітних пакетів, які не мають залежностей.
- Потім оновлювали залежні пакети,