Home » Как установить Ruby on Rails с rbenv на Ubuntu 24
Как установить Ruby on Rails с rbenv на Ubuntu 24

Как установить Ruby on Rails с rbenv на Ubuntu 24

Недавно потратил полдня на развёртывание Ruby on Rails окружения на новой Ubuntu 24, и подумал — надо бы поделиться опытом. Эта статья — полное руководство по установке Ruby on Rails с rbenv на Ubuntu 24. Если вы администрируете серверы, разрабатываете веб-приложения или просто хотите быстро развернуть Rails-проект на свежей системе, вы попали по адресу.

Главные боли, которые мы решим: как избежать конфликтов версий Ruby, почему rbenv лучше системного пакетного менеджера, и как всё настроить с первого раза без танцев с бубном. Поехали!

Почему rbenv, а не что-то другое?

Сначала разберёмся, зачем нам вообще rbenv. В мире Ruby версионирование — это головная боль. Один проект требует Ruby 3.2, другой работает только на 3.1, третий вообще legacy на 2.7. Системный Ruby обычно старый, а apt-get даёт мало контроля над версиями.

rbenv решает эту проблему элегантно — он позволяет устанавливать множество версий Ruby и переключаться между ними per-project или globally. Никаких конфликтов, никаких sudo gem install (что само по себе антипаттерн).

Сравнение менеджеров версий Ruby

Менеджер Преимущества Недостатки Рекомендация
rbenv Легковесный, простой, стабильный Меньше функций чем у RVM Лучший выбор для production
RVM Много функций, gemsets из коробки Тяжёлый, может конфликтовать с shell Для сложных dev-окружений
asdf Универсальный (не только Ruby) Оверкилл для чистого Ruby Если нужно управлять Node.js, Python и т.д.
chruby Минималистичный Мало функций, ручная установка Ruby Для опытных пользователей

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

Первым делом обновляем систему и устанавливаем зависимости. Ubuntu 24 довольно свежая, но лучше перестраховаться:

sudo apt update && sudo apt upgrade -y

# Зависимости для компиляции Ruby
sudo apt install -y curl git build-essential libssl-dev libreadline-dev zlib1g-dev libncurses5-dev libffi-dev libgdbm6 libgdbm-dev libyaml-dev

# Дополнительные пакеты для Rails
sudo apt install -y nodejs npm sqlite3 libsqlite3-dev postgresql postgresql-contrib libpq-dev

Несколько важных моментов:

  • build-essential — без него Ruby не скомпилируется
  • libssl-dev — для HTTPS и криптографических операций
  • postgresql — Rails по умолчанию использует SQLite, но в production лучше Postgres
  • nodejs — нужен для asset pipeline в Rails

Установка rbenv

Теперь устанавливаем сам rbenv. Есть несколько способов, но я рекомендую через официальный скрипт:

# Клонируем rbenv
git clone https://github.com/rbenv/rbenv.git ~/.rbenv

# Компилируем опциональную C-расширения для скорости
cd ~/.rbenv && src/configure && make -C src

# Добавляем rbenv в PATH
echo 'export PATH="$HOME/.rbenv/bin:$PATH"' >> ~/.bashrc
echo 'eval "$(rbenv init -)"' >> ~/.bashrc

# Перезагружаем shell
exec $SHELL

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

rbenv --version
# Должно показать что-то вроде: rbenv 1.2.0-xxx

Установка ruby-build

rbenv сам по себе только переключает версии Ruby. Для установки новых версий нужен ruby-build:

# Клонируем ruby-build как плагин rbenv
git clone https://github.com/rbenv/ruby-build.git ~/.rbenv/plugins/ruby-build

# Проверяем доступные версии
rbenv install --list

Команда должна показать длинный список доступных версий Ruby. Если видите только несколько строк, значит что-то пошло не так.

Устанавливаем Ruby

Теперь самое интересное — компиляция Ruby. Процесс займёт несколько минут:

# Устанавливаем последнюю стабильную версию Ruby 3.2
rbenv install 3.2.0

# Или если нужна самая свежая
rbenv install 3.3.0

# Делаем версию глобальной по умолчанию
rbenv global 3.2.0

# Проверяем
ruby --version
gem --version

Полезные команды rbenv:

  • rbenv versions — показывает установленные версии
  • rbenv version — показывает текущую активную версию
  • rbenv local 3.1.0 — устанавливает версию для конкретного проекта
  • rbenv rehash — обновляет shims после установки новых gem’ов

Настройка Bundler и Rails

Теперь устанавливаем Bundler (менеджер зависимостей для Ruby) и Rails:

# Отключаем установку документации для gem'ов (экономим время и место)
echo 'gem: --no-document' >> ~/.gemrc

# Устанавливаем Bundler
gem install bundler

# Устанавливаем Rails
gem install rails

# Обновляем shims
rbenv rehash

# Проверяем
rails --version

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

Давайте создадим простое Rails-приложение, чтобы убедиться, что всё работает:

# Создаём новое приложение
rails new test_app -d postgresql

# Переходим в директорию
cd test_app

# Устанавливаем зависимости
bundle install

# Создаём и мигрируем базу данных
rails db:create
rails db:migrate

# Запускаем сервер
rails server

Если всё прошло успешно, приложение будет доступно по адресу http://localhost:3000.

Типичные проблемы и решения

За годы работы с Rails накопилось несколько типичных граблей:

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

Обычно не хватает зависимостей. Проверьте, что установлены все пакеты из секции “Подготовка системы”.

Проблема: Command not found после установки gem’а

Запустите rbenv rehash. rbenv создаёт shims для исполняемых файлов, и их нужно обновлять.

Проблема: Rails падает при запуске

Скорее всего, проблема с Node.js или yarn. Убедитесь, что установлен Node.js версии 14 или выше.

Проблема: PostgreSQL не подключается

Проверьте статус сервиса:

sudo systemctl status postgresql
sudo systemctl start postgresql

# Создайте пользователя для Rails
sudo -u postgres createuser -s your_username

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

Для тех, кто часто развёртывает Rails-окружения, вот готовый скрипт:

#!/bin/bash
# rails_setup.sh - автоматическая установка Ruby on Rails с rbenv

set -e

echo "🚀 Начинаем установку Ruby on Rails с rbenv..."

# Обновляем систему
sudo apt update && sudo apt upgrade -y

# Устанавливаем зависимости
sudo apt install -y curl git build-essential libssl-dev libreadline-dev \
    zlib1g-dev libncurses5-dev libffi-dev libgdbm6 libgdbm-dev libyaml-dev \
    nodejs npm sqlite3 libsqlite3-dev postgresql postgresql-contrib libpq-dev

# Устанавливаем rbenv
git clone https://github.com/rbenv/rbenv.git ~/.rbenv
cd ~/.rbenv && src/configure && make -C src

# Добавляем в PATH
echo 'export PATH="$HOME/.rbenv/bin:$PATH"' >> ~/.bashrc
echo 'eval "$(rbenv init -)"' >> ~/.bashrc

# Устанавливаем ruby-build
git clone https://github.com/rbenv/ruby-build.git ~/.rbenv/plugins/ruby-build

# Перезагружаем shell
export PATH="$HOME/.rbenv/bin:$PATH"
eval "$(rbenv init -)"

# Устанавливаем Ruby
RUBY_VERSION="3.2.0"
rbenv install $RUBY_VERSION
rbenv global $RUBY_VERSION

# Настраиваем gem
echo 'gem: --no-document' >> ~/.gemrc

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

echo "✅ Установка завершена!"
echo "Ruby версия: $(ruby --version)"
echo "Rails версия: $(rails --version)"

Сохраните скрипт и запустите:

chmod +x rails_setup.sh
./rails_setup.sh

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

Для тех, кто предпочитает контейнеризацию, вот Dockerfile для Rails-приложения:

FROM ubuntu:24.04

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

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

# Устанавливаем rbenv
RUN git clone https://github.com/rbenv/rbenv.git ~/.rbenv
RUN git clone https://github.com/rbenv/ruby-build.git ~/.rbenv/plugins/ruby-build

# Добавляем в PATH
ENV PATH="/home/rails/.rbenv/bin:$PATH"
RUN echo 'eval "$(rbenv init -)"' >> ~/.bashrc

# Устанавливаем Ruby
RUN eval "$(rbenv init -)" && rbenv install 3.2.0 && rbenv global 3.2.0

# Устанавливаем Rails
RUN eval "$(rbenv init -)" && gem install bundler rails && rbenv rehash

EXPOSE 3000
CMD ["bash"]

Продвинутые настройки

Использование .ruby-version

В каждом проекте создавайте файл .ruby-version с нужной версией Ruby:

echo "3.2.0" > .ruby-version

rbenv автоматически переключится на эту версию при входе в директорию.

Оптимизация компиляции

Для ускорения компиляции Ruby можно использовать переменные окружения:

export RUBY_CONFIGURE_OPTS="--disable-install-doc"
export MAKE_OPTS="-j$(nproc)"
rbenv install 3.2.0

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

Для production-серверов создайте systemd-сервис:

# /etc/systemd/system/rails-app.service
[Unit]
Description=Rails Application
After=network.target

[Service]
Type=simple
User=deploy
WorkingDirectory=/var/www/myapp
Environment=RAILS_ENV=production
Environment=PATH=/home/deploy/.rbenv/bin:/home/deploy/.rbenv/shims:/usr/local/bin:/usr/bin:/bin
ExecStart=/home/deploy/.rbenv/shims/bundle exec rails server -p 3000
Restart=always

[Install]
WantedBy=multi-user.target

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

Полезные команды для диагностики:

# Проверяем, какая версия Ruby активна
rbenv version

# Показываем путь к текущему Ruby
rbenv which ruby

# Проверяем установленные gem'ы
gem list

# Показываем информацию о конфигурации rbenv
rbenv --help

Обновление и обслуживание

Регулярно обновляйте rbenv и ruby-build:

# Обновляем rbenv
cd ~/.rbenv && git pull

# Обновляем ruby-build
cd ~/.rbenv/plugins/ruby-build && git pull

# Обновляем gem'ы
gem update --system
gem update

Хостинг для Rails-приложений

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

Интересные факты и лайфхаки

  • rbenv написан на bash и занимает всего ~200 строк кода в основном файле
  • Команда rbenv exec позволяет запускать команды с конкретной версией Ruby
  • Можно создавать собственные плагины для rbenv — это просто bash-скрипты в ~/.rbenv/plugins/
  • rbenv не загружается в shell по умолчанию, в отличие от RVM, что делает его быстрее
  • Файл .ruby-version поддерживается большинством CI/CD систем

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

Заключение и рекомендации

rbenv + Ruby on Rails на Ubuntu 24 — это проверенная временем комбинация для разработки и deployment веб-приложений. Основные преимущества подхода:

  • Изоляция версий — каждый проект может использовать свою версию Ruby
  • Простота — минимум магии, всё прозрачно и понятно
  • Стабильность — rbenv не вмешивается в работу системы
  • Производительность — лёгкий и быстрый в отличие от RVM

Рекомендую этот стек для:

  • Production-серверов (стабильность прежде всего)
  • Development-окружений (простота настройки)
  • CI/CD пайплайнов (предсказуемое поведение)
  • Командной разработки (единые версии через .ruby-version)

Не рекомендую, если:

  • Вы новичок в Ruby и предпочитаете GUI-инструменты
  • Нужны продвинутые функции типа gemsets из коробки
  • Работаете в экосистеме, где все используют RVM

В целом, rbenv — это золотая середина между функциональностью и простотой. Один раз настроил — работает годами без проблем. Удачи в разработке!


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

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

Leave a reply

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