Управление версия Ruby с помошью RVM
RVM - программный инструмент для управления версиями языка программирования Ruby. Предназначен для управления несколькими установками Ruby на одном устройстве.
Салют, $USER!
Эй, кстати, наш Telegram уже ждёт именно тебя. Забегай!
Предисловие.
RUBY - динамический, интерпретируемый, объектно-ориентированный скриптовый язык программирования. Создан в середине 1990-х годов японским программистом Юкихиро Мацумото.
RVM(Ruby Version Manager) - программный инструмент для управления версиями языка программирования Ruby. Предназначен для управления несколькими установками Ruby на одном устройстве.
rbenv - инструмент управления версиями для языка программирования Ruby в системах, похожих на Unix аналогичный RVM
Для чего нужен менеджер версий RUBY.
Менеджер версий позволяет:
- Устанавливать несколько версий Ruby и мгновенно переключаться между ними.
- Изолировать гемы для каждого проекта (gemsets) — никакой каши в системе.
- Точно соответствовать версии на продакшене.
- Устанавливать любую версию Ruby одной командой, без прав суперпользователя.
- Автоматически активировать нужную версию при входе в папку проекта.
Но работать будет с RVM лично мне он нравиться больше.
Установка RVM - Ubuntu
Ну что, приступим к установке RVM? Я буду делать это всё на системе Ubuntu 24.04. Я привык больше работать с DEB-подобными системами, такими как Debian/Ubuntu.
Шаг 1: Установка зависимостей
Для начала давайте обновим систему.
1
apt update
Далее установим зависимости
1
apt-get install -y curl git build-essential libssl-dev libreadline-dev zlib1g-dev gpugpg2
Шаг 2: Установка RVM
Тут все довольно просто, идем на сайт rvm.io Ставим GPG ключ.
1
gpg2 --keyserver keyserver.ubuntu.com --recv-keys 409B6B1796C275462A1703113804BB82D39DC0E3 7D2BAF1CF37B13E2069D6956105BD0E739499BDB
Далее ставим сам RVM.
1
curl -sSL https://get.rvm.io | bash -s stable
Далее немного подредактируем .bashrc файл.
1
2
export PATH="$PATH:$HOME/.rvm/bin"
source ~/.rvm/scripts/rvm
Что мы тут делаем, добавляем путь до установленного rvm в переменную PATH и загружаем сам профайл ~/.rvm/scripts/rvm. Объясню чуть дальше, для чего это надо.
Ну и проверяем версию rvm.
1
2
rvm -v
rvm 1.29.12 (latest) by Michal Papis, Piotr Kuczynski, Wayne E. Seguin [https://rvm.io]
Шаг 3: настройка RVM для текущего сеанса
В предыдущем шаге мы добавили в .bashrc загрузку скриптов rvm.
1
source ~/.rvm/scripts/rvm
Собственно, для чего это нужно? Дело в том, что RVM — это не просто утилита, которая позволяет устанавливать разные версии Ruby, но и так же переключаться динамически при переходе в директории, если там есть файл .ruby-version. Сейчас объясню:
Я нахожусь в директории /home/floki и выполню проверку версии Ruby. В данный момент у меня стоит системная версия Ruby.
1
2
3
4
ruby -v
ruby 3.2.3 (2024-01-18 revision 52bb2ac0a6) [x86_64-linux-gnu]
which ruby
/usr/bin/ruby
Как видим выше, путь до бинарного файла Ruby ведет в /usr/bin/. Теперь давайте поставим версию Ruby, к примеру, 3.4.1
1
rvm install 3.4.1
И проверим установку командой.
1
2
3
4
5
6
7
8
rvm list
ruby-3.4.1 [ x86_64 ]
# Default ruby not set. Try 'rvm alias create default <ruby>'.
# => - current
# =* - current && default
# * - default
Но я не хочу для проектов переключать системную Ruby. Создадим директорию и в ней файл .ruby-version.
1
2
3
4
mkdir test_ruby
vim test_ruby/.ruby-version
и вставим следующее
ruby-3.4.1
Перейдем в директорию test_ruby и проверим версию Ruby.
1
2
3
4
5
cd test_ruby
ruby -v
ruby 3.4.1 (2024-12-25 revision 48d4efcb85) +PRISM [x86_64-linux]
which ruby
/home/floki/.rvm/rubies/ruby-3.4.1/bin/ruby
Ну и как видим, уже путь до бинарного файла Ruby ведет в путь RVM.
Шаг 4: проверка автоматического переключения и установки версии Ruby
В предыдущем шаге мы уже проверили автоматическое переключение версии Ruby. Теперь давайте сделаем еще одну вещь: автоматическую установку версии Ruby, которая указана в файле .ruby-version в директории пользователя. Создадим файл rmvrc и запишем в него следующее:
1
2
vim ~/.rvmrc
rvm_install_on_use_flag=1
Перечетаем bashrc.
1
source ~/.bashrc
Создадим директорию и в этой директории файл .ruby-version с версией Ruby, к примеру 3.3.6, и перейдем в эту директорию.
1
2
3
cd ruby-3/
Required ruby-3.3.6 is not installed - installing.
Searching for binary rubies, this might take some time.
И, как мы видим из вывода, у нас при переходе в директорию rvm проверил файл .ruby-version и увидел, что там указана версия 3.3.6. У себя он ее не нашел и сам начал ее устанавливать
1
2
3
4
ruby -v
ruby 3.3.6 (2024-11-05 revision 75015d4c1f) [x86_64-linux]
which ruby
/home/floki/.rvm/rubies/ruby-3.3.6/bin/ruby
Работа с gemsets в RVM
Gemset — это изолированная директория, в которой хранятся гемы для конкретного проекта. RVM позволяет создавать отдельные гемсеты для каждой версии Ruby и переключаться между ними.
Зачем нужны гемсеты?
Без гемсетов все гемы устанавливаются в одно общее место (~/.rvm/gems/ruby-3.2.2). Это приводит к проблемам:
Конфликты версий — проект А требует Rails 6.1, проект Б — Rails 7.1. Они не могут жить вместе.
Замусоривание — гемы старых проектов остаются навсегда.
Невозможность точного воспроизведения — сложно гарантировать, что другой разработчик получит тот же набор гемов.
Gemsets решают эти проблемы:
Полная изоляция — у каждого проекта свой набор гемов.
Чистота — можно удалить гемсет вместе со всеми гемами проекта.
Совместимость — разные версии одного гема живут в разных гемсетах без конфликтов.
Точное соответствие — файл .ruby-gemset фиксирует имя гемсета для проекта.
