Как управлять разными версиями на одной системе?ruby-56

Для профессионального Ruby-разработчика умение работать с несколькими версиями Ruby — критически важный навык. Вот комплексный подход, который я рекомендую.

1. Использование менеджеров версий Ruby

rbenv

# Установка версии
rbenv install 3.2.2

# Установка версии по умолчанию
rbenv global 3.2.2

# Установка версии для конкретного проекта
rbenv local 2.7.8

RVM

# Установка версии
rvm install 3.1.4

# Использование версии
rvm use 3.1.4

2. Настройка окружения для проекта

Файл .ruby-version

# Создаем в корне проекта
echo "3.1.4" > .ruby-version

Gemfile с указанием версии Ruby

# В Gemfile
ruby '```> 3.1.4'

3. Переключение между версиями

Команды для rbenv

# Список установленных версий
rbenv versions

# Установить глобальную версию
rbenv global 3.2.2

# Использовать версию только в текущей сессии
rbenv shell 2.7.8

4. Установка гемов для разных версий

Каждая версия Ruby имеет свои gem-окружения. Для изоляции:

Bundler

# Установить гемы для текущей версии Ruby
bundle install

5. Docker-контейнеры для сложных случаев

FROM ruby:3.2.2-slim

WORKDIR /app
COPY Gemfile Gemfile.lock ./
RUN bundle install

COPY . .

6. Автоматическое переключение версий

direnv + rbenv

# .envrc в папке проекта
layout rbenv
rbenv version-name

7. Решение распространенных проблем

  1. Несоответствие версий:
rbenv rehash
  1. Отсутствие dev-пакетов:
sudo apt-get install -y build-essential libssl-dev zlib1g-dev
  1. Конфликты гемов:
gem pristine --all

8. Версионирование в CI/CD

Пример для GitHub Actions:

jobs:
  test:
    runs-on: ubuntu-latest
    strategy:
      matrix:
        ruby-version: ['3.0.0', '3.1.0', '3.2.0']
    steps:
      - uses: ruby/setup-ruby@v1
        with:
          ruby-version: ${{ matrix.ruby-version }}

9. Проверка совместимости

ruby-next для обратной совместимости

bundle exec ruby-next nextify lib/

Резюмируем: Для эффективного управления версиями Ruby используйте rbenv/RVM, указывайте версии в .ruby-version и Gemfile, изолируйте гемы через Bundler, а для сложных сценариев применяйте Docker. Автоматизируйте переключение версий и тестирование в CI. Помните — чистое и предсказуемое окружение основа продуктивной разработки на Ruby.