- Home »

Установка 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. Это инвестиция времени, которая окупится уже в первом серьёзном проекте.
В этой статье собрана информация и материалы из различных интернет-источников. Мы признаем и ценим работу всех оригинальных авторов, издателей и веб-сайтов. Несмотря на то, что были приложены все усилия для надлежащего указания исходного материала, любая непреднамеренная оплошность или упущение не являются нарушением авторских прав. Все упомянутые товарные знаки, логотипы и изображения являются собственностью соответствующих владельцев. Если вы считаете, что какой-либо контент, использованный в этой статье, нарушает ваши авторские права, немедленно свяжитесь с нами для рассмотрения и принятия оперативных мер.
Данная статья предназначена исключительно для ознакомительных и образовательных целей и не ущемляет права правообладателей. Если какой-либо материал, защищенный авторским правом, был использован без должного упоминания или с нарушением законов об авторском праве, это непреднамеренно, и мы исправим это незамедлительно после уведомления. Обратите внимание, что переиздание, распространение или воспроизведение части или всего содержимого в любой форме запрещено без письменного разрешения автора и владельца веб-сайта. Для получения разрешений или дополнительных запросов, пожалуйста, свяжитесь с нами.