Пост

Управление версия Ruby с помошью RVM

RVM - программный инструмент для управления версиями языка программирования Ruby. Предназначен для управления несколькими установками Ruby на одном устройстве.

Управление версия Ruby с помошью RVM

Салют, $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 фиксирует имя гемсета для проекта.

Авторский пост защищен лицензией CC BY 4.0 .

Популярные теги