rbenv, RVM или chruby? Менеджеры Ruby под микроскопом

Вы только что установили свежий Ubuntu, открыли терминал с мечтами о новом Rails-проекте… И тут “ruby: command not found”. Знакомо? Добро пожаловать в мир менеджеров Ruby-версий — где одни спасают ваши нервы, а другие их испытывают. Сегодня разберём трёх китов: RVM, rbenv и chruby, их больные места и подводные камни.


🧐 Зачем вообще эти менеджеры?

Потому что:

  1. Проекты живут на разных версиях Ruby (Rails 6 требует 2.7, а legacy-монстр — 2.3)
  2. Системный Ruby — зло (попробуйте sudo gem install и получите права на свой же сервер)
  3. Gemset’ы (чтобы bundle install не превращался в игру “найди конфликтующую гему”)

Идеальный менеджер должен:

  • Быстро переключать версии
  • Не ломать PATH
  • Работать без танцев с бубном
  • Не заставлять вас редактировать .bashrc каждые 2 часа

� RVM: “Я — король!”

RVM (Ruby Version Manager) — дедушка менеджеров. Устанавливается одной командой, умеет всё, но… иногда слишком много.

# Установка (крепко держитесь)
\curl -sSL https://get.rvm.io | bash -s stable

👍 Плюсы:

  • Автоматические gemset’ы (rvm use 3.1.0@myapp —create)
  • Интеграция с Bundler (rvm . do bundle install)
  • Богатая документация (и 100500 способов сломать себе систему)

👎 Минусы:

  • Переписывает ваш shell (попробуйте type cd после установки)
  • Медленный (каждый новый терминал грузит всю обвязку)
  • “Магический” (иногда непонятно, почему он решил использовать именно эту версию)

💀 Антипаттерн:

# Не делайте так! Это переключит Ruby ГЛОБАЛЬНО
rvm use 3.0.0

🧊 rbenv: “Минимализм — наше всё”

rbenv — ответ хипстеров на RVM. Никакой магии, только PATH и symlinks.

# Установка через Homebrew (macOS) или git
brew install rbenv ruby-build

👍 Плюсы:

  • Не лезет в shell (просто добавляет пару строк в PATH)
  • Предсказуемость (версия выбирается по .ruby-version или через rbenv local)
  • Плагины (например, rbenv-vars для env-переменных)

👎 Минусы:

  • Нет встроенных gemset’ов (придётся использовать bundler или direnv)
  • Требует ручной сборки Ruby (но ruby-build решает)

🎯 Идеальный сценарий:

# Устанавливаем Ruby
rbenv install 3.2.2

# Назначаем версию для проекта
cd my_project
rbenv local 3.2.2

# Profit! Теперь даже `cd` будет подхватывать версию

⚡ chruby: “Я просто переключаю Ruby”

chruby — это 100 строк кода, которые делают ровно одну вещь: меняют $PATH.

# Установка (macOS)
brew install chruby ruby-install

👍 Плюсы:

  • Быстрее света (никакой загрузки в shell)
  • Прозрачность (chruby просто меняет переменные окружения)
  • “UNIX-way” (делает одну вещь и делает её хорошо)

👎 Минусы:

  • Нет авто-переключения (нужен auto.sh скрипт для .ruby-version)
  • Ноль фич (хотите gemset’ы? Пишите свои скрипты)

🔥 Для фанатов контроля:

# Вручную переключаемся
chruby 3.1.0

# Или через файл
echo "3.1.0" > .ruby-version

🧪 Сравнение в бою

Критерий RVM rbenv chruby
Скорость 🐢 🐇
Gemset’ы ✅ Встроенные ❌ Требует Bundler ❌ Нет
Автопереключение ❌ (только с плагинами)
Влияние на shell 🔥 Переписывает 🔄 Минимальное � Почти нулевое
Сложность отладки 😱 😊 😎

💡 Какой выбрать?

  • Для новичков: rbenv — баланс простоты и функциональности
  • Для энтерпрайза: RVM — если нужны изолированные gemset’ы
  • Для минималистов: chruby — когда хочется контроля и скорости

Лично мой стек:

# На работе (много legacy-проектов)
RVM + .rvmrc (да, я живу опасно)

# На личном MacBook
chruby + ruby-install + direnv

# На серверах
rbenv (потому что "меньше магии — крепче сон")

💥 Главная боль всех менеджеров

Docker.
Когда вы собираете образ, все эти менеджеры становятся избыточными. Лучшая практика:

FROM ruby:3.2.2-alpine # ← Вот и весь ваш менеджер
WORKDIR /app
COPY Gemfile* .
RUN bundle install

Но локально без них всё равно никуда.


🎤 Что сказать на собеседовании

— Как вы управляете версиями Ruby в проекте?

— Мы используем rbenv с ruby-build для локальной разработки и фиксируем версию в Dockerfile для прода. Для gemset’ов полагаемся на Bundler — это даёт предсказуемость и в dev, и в prod.


🧾 Вывод

Выбор менеджера — как выбор текстового редактора:

  • RVM — это как IDE: мощно, но тяжело
  • rbenv — VS Code: баланс функций и простоты
  • chruby — Vim: минимализм для тех, кто знает, что делает

🗓 Дата публикации: 18.09.2024, но это не точно...

Ruby RVM rbenv chruby менеджеры версий Ubuntu