Как вы контролируете версии Ruby на своей локальной машине?

Контроль версий Ruby на локальной машине — это важная часть работы разработчика в экосистеме Ruby и Ruby on Rails. Он позволяет использовать разные версии Ruby для разных проектов, избегать конфликтов между библиотеками (гемами) и обеспечивать совместимость с продакшен-средой. Основными инструментами для управления версиями Ruby являются rbenv, RVM (Ruby Version Manager) и asdf. Каждый из них имеет свои особенности, но решает одну задачу — позволить устанавливать и переключаться между несколькими версиями Ruby.

🔧 1. rbenv — один из самых популярных инструментов

rbenv — это лёгкий менеджер версий Ruby, который работает путём подмены команды ruby (и других исполняемых файлов Ruby) в $PATH, указывая их на соответствующую версию Ruby.

Установка rbenv (на macOS/Linux):

\# Установка rbenv и ruby-build через Homebrew
brew install rbenv ruby-build
\# Инициализация rbenv
rbenv init
\# Добавить инициализацию в .bashrc, .zshrc или .profile
echo 'eval "$(rbenv init -)"' >> ~/.zshrc
source ~/.zshrc

Установка Ruby с rbenv:

rbenv install 3.2.2

Использование Ruby:

  • Установить версию глобально:
rbenv global 3.2.2
  • Установить версию локально (на уровне проекта):
rbenv local 2.7.7

Это создаст файл .ruby-version в директории проекта, что позволяет автоматически использовать нужную версию при входе в каталог.

Проверка установленной версии:

ruby -v
rbenv versions

⚙️ 2. RVM — Ruby Version Manager

RVM — это более мощный инструмент, чем rbenv. Он не только управляет версиями Ruby, но и окружениями (Gemsets). Он может быть полезен, если вы хотите полностью изолировать гемы между проектами.

Установка RVM:

\\curl -sSL https://get.rvm.io | bash -s stable

Установка Ruby через RVM:

rvm install 3.1.4

Использование версии Ruby:

rvm use 3.1.4 --default

Создание отдельного окружения (gemset):

rvm gemset create myproject
rvm use 3.1.4@myproject --default

Теперь гемы, установленные в этом контексте, не будут мешать другим проектам.

🔁 3. asdf — универсальный менеджер версий

asdf — это менеджер версий для нескольких языков программирования, включая Ruby, Node.js, Python, Elixir, Go и другие. Это удобный инструмент для полиглотов.

Установка asdf (пример для macOS):

brew install asdf

Добавьте в ~/.zshrc или ~/.bashrc:

. $(brew --prefix asdf)/libexec/asdf.sh

Добавление поддержки Ruby:

asdf plugin-add ruby
asdf install ruby 3.2.2
asdf global ruby 3.2.2

Локальная версия для проекта:

asdf local ruby 2.7.6

Создаёт .tool-versions с записью ruby 2.7.6, что работает аналогично .ruby-version.

📁 4. Как хранятся версии Ruby

Каждый из менеджеров устанавливает версии Ruby в свою директорию:

  • rbenv: ~/.rbenv/versions/

  • RVM: ~/.rvm/rubies/

  • asdf: ~/.asdf/installs/ruby/

Это позволяет полностью изолировать каждую версию, а также использовать системную версию Ruby, если нужно.

🧪 5. Как убедиться, что используется нужная версия

Чтобы понять, откуда берётся текущая версия Ruby и какие версии доступны:

ruby -v # Активная версия
which ruby # Путь к исполняемому файлу ruby
rbenv versions # (если используется rbenv)
rvm list # (если используется RVM)
asdf list ruby # (если используется asdf)

Для устранения конфликтов с системной Ruby можно использовать which и type:

type -a ruby

🔐 6. Использование .ruby-version и .ruby-gemset

Для повышения совместимости и удобства:

  • .ruby-version — фиксирует нужную версию Ruby в проекте. Поддерживается rbenv, rvm, chruby, asdf.

  • .ruby-gemset — используется только в RVM для определения gemset по умолчанию.

Это упрощает вход в проект и обеспечивает автоматическую настройку среды для других разработчиков.

📦 7. Связь с Bundler и гемами

После установки нужной версии Ruby важно установить Bundler:

gem install bundler
bundle install

Каждая версия Ruby имеет свой собственный набор гемов (если не используется gemset, как в RVM). Поэтому повторная установка bundler и других гемов в новых версиях — это нормальная практика.

🌍 8. Контроль версий в команде

  • Использование .ruby-version и Gemfile.lock позволяет зафиксировать версию Ruby и всех зависимостей проекта.

  • CI-серверы (например, GitHub Actions, GitLab CI) поддерживают setup-ruby или аналогичные шаги для указания точной версии.

  • Разработчики в команде используют один из менеджеров версий, что снижает риск "it works on my machine".

🧩 9. Совместимость с IDE

Большинство современных редакторов (VS Code, RubyMine) автоматически подхватывают .ruby-version или .tool-versions и предлагают соответствующую версию интерпретатора.

Для VS Code можно указать путь к Ruby в settings.json:

"ruby.interpreter.commandPath": "~/.rbenv/shims/ruby"

🛠️ 10. Удаление и переустановка версий

Для экономии места или устранения ошибок можно удалить неиспользуемые версии Ruby:

  • В rbenv:
rbenv uninstall 2.6.3
  • В RVM:
rvm remove 2.6.3
  • В asdf:
asdf uninstall ruby 2.6.3

Также рекомендуется время от времени чистить неиспользуемые гемы и пересобирать shims:

rbenv rehash

Таким образом, контроль версий Ruby на локальной машине реализуется через специализированные менеджеры версий (rbenv, RVM, asdf) и файлы (.ruby-version, .tool-versions), которые позволяют точно управлять средой выполнения в каждом проекте, обеспечивая согласованность, изоляцию и воспроизводимость разработки.