- Home »

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