Как вы контролируете версии 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), которые позволяют точно управлять средой выполнения в каждом проекте, обеспечивая согласованность, изоляцию и воспроизводимость разработки.