Home » Установка Ruby on Rails с rbenv на Ubuntu 24
Установка Ruby on Rails с rbenv на Ubuntu 24

Установка Ruby on Rails с rbenv на Ubuntu 24

Если тебе нужна надёжная и гибкая платформа для разработки веб-приложений, Ruby on Rails остаётся одним из лучших выборов. Но чтобы не словить “dependency hell” и сохранить рассудок при работе с разными версиями Ruby, нужен правильный подход к установке. В этой статье разберём, как настроить Ruby on Rails с rbenv на Ubuntu 24 — самый элегантный способ управления версиями Ruby, который сэкономит тебе кучу времени и нервов.

Мы пройдём весь путь от чистой системы до готового к работе окружения, разберём подводные камни и поделимся проверенными практиками. Если ты настраиваешь сервер для Rails-проектов или готовишь среду разработки, это руководство поможет сделать всё правильно с первого раза.

Почему rbenv, а не RVM или другие менеджеры версий?

Rbenv — это минималистичный менеджер версий Ruby, который работает по принципу “делай одно, но делай хорошо”. В отличие от RVM, который перехватывает команды и может конфликтовать с системными утилитами, rbenv использует простые shims и не вмешивается в работу shell.

Характеристика rbenv RVM chruby
Размер установки ~300KB ~2MB ~100KB
Вмешательство в shell Минимальное Агрессивное Минимальное
Скорость переключения Быстро Медленно Быстро
Gemset поддержка Через bundler Встроенная Через bundler
Стабильность Высокая Средняя Высокая

Подготовка системы

Начнём с установки необходимых зависимостей. Ubuntu 24 поставляется с Python 3.12, но для сборки Ruby нужны дополнительные пакеты:

sudo apt update
sudo apt install -y git curl libssl-dev libreadline-dev zlib1g-dev \
    autoconf bison build-essential libyaml-dev libreadline-dev \
    libncurses5-dev libffi-dev libgdbm-dev libgdbm-compat-dev \
    libdb-dev uuid-dev libpq-dev

Эти пакеты критически важны для компиляции Ruby и популярных гемов. Без libpq-dev, например, не соберётся pg gem для PostgreSQL, а без libffi-dev могут быть проблемы с FFI-зависимостями.

Установка rbenv

Клонируем rbenv и ruby-build (плагин для сборки Ruby) из официальных репозиториев:

git clone https://github.com/rbenv/rbenv.git ~/.rbenv
git clone https://github.com/rbenv/ruby-build.git ~/.rbenv/plugins/ruby-build

Добавляем rbenv в PATH и инициализируем его в shell:

echo 'export PATH="$HOME/.rbenv/bin:$PATH"' >> ~/.bashrc
echo 'eval "$(rbenv init -)"' >> ~/.bashrc
source ~/.bashrc

Проверяем, что rbenv работает корректно:

rbenv --version
curl -fsSL https://github.com/rbenv/rbenv-installer/raw/HEAD/bin/rbenv-doctor | bash

Скрипт rbenv-doctor покажет потенциальные проблемы в конфигурации. Если всё в порядке, увидишь зелёные галочки.

Установка Ruby

Посмотрим доступные версии Ruby и выберем нужную:

rbenv install --list | grep -E "^[0-9]+\.[0-9]+\.[0-9]+$" | tail -10

Для production-серверов рекомендую использовать стабильную версию Ruby 3.2.x или 3.3.x. Устанавливаем последнюю стабильную версию:

rbenv install 3.3.0
rbenv global 3.3.0
rbenv rehash

Команда rbenv rehash обновляет shims после установки новой версии Ruby или гемов с исполняемыми файлами.

Оптимизация установки гемов

По умолчанию RubyGems устанавливает документацию для каждого гема, что замедляет процесс. Отключим это:

echo 'gem: --no-document' >> ~/.gemrc

Обновляем RubyGems до последней версии:

gem update --system

Установка Rails

Теперь устанавливаем Rails. Для production-серверов рекомендую конкретную версию:

gem install rails -v 7.1.3
rbenv rehash

Проверяем установку:

ruby -v
rails -v
which ruby
which rails

Настройка Bundler

Bundler управляет зависимостями Rails-проектов. Настроим его для оптимальной работы:

gem install bundler
bundle config set --global path 'vendor/bundle'
bundle config set --global without 'development test'

Эта конфигурация заставит Bundler устанавливать гемы локально в проект и пропускать development/test группы на production-серверах.

Создание тестового Rails-приложения

Создадим простое приложение для проверки работоспособности:

mkdir ~/rails-apps
cd ~/rails-apps
rails new test_app --database=postgresql --skip-test
cd test_app

Если планируешь использовать PostgreSQL (что рекомендуется для production), предварительно установи его:

sudo apt install -y postgresql postgresql-contrib
sudo -u postgres createuser -s $USER

Практические сценарии использования

Сценарий 1: Множественные проекты с разными версиями Ruby

Представим, что у тебя есть старый проект на Ruby 2.7 и новый на Ruby 3.3. С rbenv это решается элегантно:

# Устанавливаем обе версии
rbenv install 2.7.8
rbenv install 3.3.0

# В каталоге старого проекта
cd /path/to/old-project
echo "2.7.8" > .ruby-version

# В каталоге нового проекта
cd /path/to/new-project
echo "3.3.0" > .ruby-version

Rbenv автоматически переключит версию Ruby при входе в каталог проекта.

Сценарий 2: Deployment с rbenv

Для deployment-серверов создай скрипт автоматической настройки:

#!/bin/bash
# deploy-setup.sh

# Проверяем наличие rbenv
if ! command -v rbenv &> /dev/null; then
    echo "rbenv не найден, устанавливаем..."
    git clone https://github.com/rbenv/rbenv.git ~/.rbenv
    git clone https://github.com/rbenv/ruby-build.git ~/.rbenv/plugins/ruby-build
    echo 'export PATH="$HOME/.rbenv/bin:$PATH"' >> ~/.bashrc
    echo 'eval "$(rbenv init -)"' >> ~/.bashrc
    source ~/.bashrc
fi

# Устанавливаем нужную версию Ruby
RUBY_VERSION=$(cat .ruby-version 2>/dev/null || echo "3.3.0")
rbenv install -s $RUBY_VERSION
rbenv global $RUBY_VERSION

# Устанавливаем зависимости
gem install bundler rails
rbenv rehash

echo "Готово! Ruby $RUBY_VERSION и Rails установлены."

Интеграция с Docker

Rbenv отлично работает в Docker-контейнерах. Вот пример Dockerfile для Rails-приложения:

FROM ubuntu:24.04

# Устанавливаем зависимости
RUN apt-get update && apt-get install -y \
    git curl libssl-dev libreadline-dev zlib1g-dev \
    autoconf bison build-essential libyaml-dev \
    libncurses5-dev libffi-dev libgdbm-dev \
    libpq-dev nodejs npm

# Создаём пользователя для rbenv
RUN useradd -m -s /bin/bash rails
USER rails
WORKDIR /home/rails

# Устанавливаем rbenv
RUN git clone https://github.com/rbenv/rbenv.git ~/.rbenv && \
    git clone https://github.com/rbenv/ruby-build.git ~/.rbenv/plugins/ruby-build && \
    echo 'export PATH="$HOME/.rbenv/bin:$PATH"' >> ~/.bashrc && \
    echo 'eval "$(rbenv init -)"' >> ~/.bashrc

# Устанавливаем Ruby и Rails
RUN /home/rails/.rbenv/bin/rbenv install 3.3.0 && \
    /home/rails/.rbenv/bin/rbenv global 3.3.0 && \
    /home/rails/.rbenv/shims/gem install rails bundler

EXPOSE 3000
CMD ["rails", "server", "-b", "0.0.0.0"]

Автоматизация и скрипты

Rbenv открывает широкие возможности для автоматизации. Вот несколько полезных скриптов:

Скрипт для автоматического обновления Ruby

#!/bin/bash
# update-ruby.sh

CURRENT_VERSION=$(rbenv global)
LATEST_VERSION=$(rbenv install --list | grep -E "^[0-9]+\.[0-9]+\.[0-9]+$" | tail -1 | tr -d ' ')

if [ "$CURRENT_VERSION" != "$LATEST_VERSION" ]; then
    echo "Обновляем Ruby с $CURRENT_VERSION на $LATEST_VERSION"
    rbenv install $LATEST_VERSION
    rbenv global $LATEST_VERSION
    gem install bundler rails
    rbenv rehash
    
    echo "Ruby обновлён до $LATEST_VERSION"
else
    echo "Ruby уже последней версии: $CURRENT_VERSION"
fi

Скрипт для проверки безопасности гемов

#!/bin/bash
# security-check.sh

gem install bundler-audit
bundle audit --update
bundle audit

Мониторинг и отладка

Для мониторинга производительности Rails-приложений с rbenv можно использовать:

  • rbenv-gemset — для изоляции гемов между проектами
  • rbenv-vars — для управления переменными окружения
  • rbenv-binstubs — для быстрого доступа к исполняемым файлам гемов

Установка дополнительных плагинов:

git clone https://github.com/rbenv/rbenv-vars.git ~/.rbenv/plugins/rbenv-vars
git clone https://github.com/sstephenson/rbenv-gem-rehash.git ~/.rbenv/plugins/rbenv-gem-rehash

Решение типичных проблем

Проблема: Ruby не компилируется

Самая частая проблема — отсутствие необходимых зависимостей. Решение:

sudo apt install -y gcc g++ make libssl-dev libreadline-dev zlib1g-dev

Проблема: Гемы не находятся после установки

Обычно помогает rehash:

rbenv rehash

Проблема: Медленная работа rbenv

Если rbenv работает медленно, можно оптимизировать инициализацию:

echo 'eval "$(rbenv init - --no-rehash)"' >> ~/.bashrc

Альтернативные решения

Помимо rbenv, существуют другие менеджеры версий Ruby:

  • asdf — универсальный менеджер версий для разных языков
  • chruby — ещё более минималистичный менеджер
  • RVM — более функциональный, но тяжёлый
  • Docker — полная изоляция через контейнеры

Полезные ссылки

Для более глубокого изучения рекомендую:

Если планируешь разворачивать Rails-приложения в production, обрати внимание на качественные VPS-серверы или выделенные серверы с Ubuntu 24.

Заключение

Rbenv с Ruby on Rails на Ubuntu 24 — это надёжная и проверенная временем комбинация. Она даёт полный контроль над версиями Ruby, не засоряет систему и позволяет легко масштабировать проекты. Главные преимущества такого подхода:

  • Изоляция версий Ruby по проектам
  • Минимальное вмешательство в системные процессы
  • Простота deployment и автоматизации
  • Стабильность и предсказуемость

Используй rbenv для development-окружений, где нужна гибкость переключения версий, и для production-серверов, где важна стабильность. Избегай его только в случаях, когда нужна полная изоляция — тогда лучше выбрать Docker.

С правильно настроенным rbenv ты сможешь легко поддерживать множество Rails-проектов, не беспокоясь о конфликтах версий и dependency hell. Это инвестиция времени, которая окупится уже в первом серьёзном проекте.


В этой статье собрана информация и материалы из различных интернет-источников. Мы признаем и ценим работу всех оригинальных авторов, издателей и веб-сайтов. Несмотря на то, что были приложены все усилия для надлежащего указания исходного материала, любая непреднамеренная оплошность или упущение не являются нарушением авторских прав. Все упомянутые товарные знаки, логотипы и изображения являются собственностью соответствующих владельцев. Если вы считаете, что какой-либо контент, использованный в этой статье, нарушает ваши авторские права, немедленно свяжитесь с нами для рассмотрения и принятия оперативных мер.

Данная статья предназначена исключительно для ознакомительных и образовательных целей и не ущемляет права правообладателей. Если какой-либо материал, защищенный авторским правом, был использован без должного упоминания или с нарушением законов об авторском праве, это непреднамеренно, и мы исправим это незамедлительно после уведомления. Обратите внимание, что переиздание, распространение или воспроизведение части или всего содержимого в любой форме запрещено без письменного разрешения автора и владельца веб-сайта. Для получения разрешений или дополнительных запросов, пожалуйста, свяжитесь с нами.

Leave a reply

Your email address will not be published. Required fields are marked