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

Обзор
Ruby on Rails (RoR) — это свободный фреймворк для веб‑приложений, написанный на языке Ruby и распространяющийся по лицензии MIT. Rails предоставляет «полный стек»: структуру проекта, системы для работы с БД, шаблонизатор HTML, маршрутизацию и встроенные инструменты безопасности (защита от SQL‑инъекций, XSS, CSRF). Rails следует архитектуре model‑view‑controller (MVC) и принципам DRY (Don’t Repeat Yourself) и «Convention over Configuration». В этом руководстве мы устанавливаем Rails на Ubuntu 22.04, используем rbenv для управления версиями Ruby и PostgreSQL как базу данных.
Важно: примеры в статье используют Ruby 3.1.2 и Rails 7.0.2.4, вы можете заменить версии на актуальные, сохраняя совместимость.
Кому это нужно
- Разработчикам, которые хотят локально или на сервере подготовить среду для Rails‑проектов.
- Системным администраторам, настраивающим CI/CD или тестовые VM для Rails.
- Руководителям команд, которые хотят стандартизировать окружение разработки.
Необходимые ресурсы
- Ubuntu 22.04 (локальная машина или VPS).
- Ненулевой пользователь с правами sudo.
- PostgreSQL установлен или доступен для установки.
Ключевые понятия (1‑строчная дефиниция)
- rbenv — менеджер версий Ruby, позволяет управлять локальными и глобальными версиями Ruby.
- ruby‑build — плагин для rbenv, упрощающий сборку/установку версий Ruby из исходников.
- Bundler — менеджер зависимостей для Ruby‑проектов.
- Rails — веб‑фреймворк на Ruby.
Шаг 1. Установка пакетных зависимостей
Перед установкой Rails потребуются системные пакеты, Node.js и Yarn (для компиляции фронтенд-активов). Ниже — последовательность команд и пояснения.
Установка базовых утилит (gnupg2, apt‑transport‑https, curl):
sudo apt install gnupg2 apt-transport-https curlДобавление репозитория NodeSource и установка LTS‑версии Node.js (на момент примера — v16):
curl -sL https://deb.nodesource.com/setup_lts.x | sudo -E bash -Добавление GPG‑ключа и репозитория Yarn:
curl -sS -o /etc/apt/trusted.gpg.d/yarn.gpg https://dl.yarnpkg.com/debian/pubkey.gpg
echo "deb https://dl.yarnpkg.com/debian/ stable main" | sudo tee /etc/apt/sources.list.d/yarn.listОбновление индексом пакетов и установка основных библиотек для сборки Ruby и работы с БД:
sudo apt update
sudo apt install git-core zlib1g-dev build-essential libssl-dev libreadline-dev libyaml-dev libsqlite3-dev sqlite3 libxml2-dev libxslt1-dev libcurl4-openssl-dev software-properties-common libffi-dev nodejs yarnПодтвердите установку вводом Y и нажатием ENTER.
Примечание: если вы используете облачную VM, убедитесь, что дисковое пространство и память достаточны для компиляции Ruby (обычно требуется 1–2 ГБ ОЗУ и несколько сотен МБ свободного места; для больших билдов — больше).
Шаг 2. Установка и настройка rbenv
rbenv облегчает установку и переключение версий Ruby. В примере используется учётная запись alice — замените на вашего пользователя.
Выполните вход под нужным пользователем (локально делайте sudo -i или используйте su):
su - aliceКлонирование rbenv в домашнюю директорию:
git clone https://github.com/rbenv/rbenv.git ~/.rbenvДобавьте rbenv в PATH и инициализацию в ~/.bashrc, затем перезагрузите сессию bash:
echo 'export PATH="$HOME/.rbenv/bin:$PATH"' >> ~/.bashrc
echo 'eval "$(rbenv init -)"' >> ~/.bashrc
source ~/.bashrcУстановка плагина ruby-build, который нужен для установки версий Ruby:
git clone https://github.com/rbenv/ruby-build.git ~/.rbenv/plugins/ruby-buildДобавьте путь плагина и перезагрузите сессию:
echo 'export PATH="$HOME/.rbenv/plugins/ruby-build/bin:$PATH"' >> ~/.bashrc
source ~/.bashrcПроверка установки rbenv:
rbenv commands
Если команда выполнена и показывает варианты, rbenv настроен корректно.
Шаг 3. Установка Ruby через rbenv
Установим Ruby 3.1.2 как пример стабильной версии, используемой в статье.
rbenv install 3.1.2Установите версию по умолчанию глобально:
rbenv global 3.1.2Проверьте установленную версию Ruby:
ruby -v
Установка Bundler (менеджера гемов):
gem install bundlerВы увидите вывод установленного bundler в консоли.

Совет: если при установке гемов возникают ошибки, обратите внимание на лог сборки — часто не хватает системных библиотек (openssl, libffi) или прав. Убедитесь, что gcc и make установлены (build-essential), и что переменные окружения (например, PATH для rbenv) настроены верно.
Шаг 4. Установка Rails
После установки Ruby и Bundler установите Rails. В примере ставим Rails 7.0.2.4.
gem install rails -v 7.0.2.4Установка может занять время — ставятся многочисленные зависимости (гемы). После установки выполните:
rbenv rehashПроверьте версию Rails и список доступных команд:
rails -v
rails help
Шаг 5. Настройка PostgreSQL как базы данных
Если PostgreSQL ещё не установлен, установите его через apt. Для работы Rails нужен пакет разработки libpq-dev:
sudo apt install libpq-dev -y
Создайте роль PostgreSQL для вашего приложения (в примере alice). Команда ниже создаёт роль и попросит задать пароль:
sudo -u postgres createuser -S -d -r -P aliceПараметры команды:
- -S — не давать суперпользовательских прав;
- -d — разрешить создание баз данных;
- -r — разрешить создание ролей;
- -P — запросить пароль.
Проверка входа под созданной ролью (используйте пароль, который задали):
sudo -u alice psql -U alice -h 127.0.0.1 -d postgresВнутри psql можно выполнить:
\conninfo
\du
Если подключение прошло — роль и пароль настроены корректно.
Шаг 6. Создание нового Rails‑проекта с PostgreSQL
Создаём проект myapp и указываем базу данных PostgreSQL:
rails new myapp -d postgresql
Перейдите в каталог проекта и отредактируйте файл config/database.yml (можно любым редактором, здесь nano):
cd myapp/
nano config/database.ymlНайдите секцию development и укажите свои параметры подключения (замените alice и mypassword на реальные значения):
username: alice
password: mypassword
host: localhost
port: 5432Сохраните файл и выйдите из редактора.
Создаём базу данных и выполняем миграции:
rake db:create
rake db:migrateЕсли возникли ошибки аутентификации — проверьте пароль, роль и настройки pg_hba.conf.
Запуск сервера разработки (пример с привязкой к IP машины — замените адрес):
rails server -b 192.168.10.15В браузере перейдите по адресу http://192.168.10.15:3000 — вы увидите стандартную стартовую страницу Rails.


Критерии приёмки
- Команда rails -v возвращает версию 7.x.
- Ruby ruby -v показывает 3.1.2 (или желаемую версию).
- rake db:create успешно создаёт базу данных PostgreSQL.
- rails server запускается и доступен на порту 3000.
- Bundler успешно устанавливает гемы без ошибок компиляции.
Частые проблемы и их решения
Ошибка при установке гемов с native extensions (напр., nokogiri, pg):
Решение: установите системные dev‑пакеты (libxml2-dev, libxslt1-dev, libpq-dev). Проверьте наличие build-essential.Gem install занимает слишком много времени или падает:
Проверьте права на директории, свободное место на диске и доступ к сети (firewall/HTTP proxy).Ошибка аутентификации PostgreSQL:
Убедитесь, что вы задали пароль при createuser и используете правильный host/port. Проверьте /etc/postgresql/*/main/pg_hba.conf на политику аутентификации.rails server не привязан к внешнему интерфейсу:
Используйте параметр -b 0.0.0.0 или конкретный IP; проверьте firewall/ufw правила.После установки rbenv ruby не находится:
Убедитесь, что сохранены изменения в ~/.bashrc и выполнен source ~/.bashrc; затем rbenv rehash.
Альтернативные подходы
- RVM — полноценный менеджер Ruby с функциями установки и изоляции гемов. Rbenv легче для CI и совместим с системными пакетами.
- asdf — универсальный менеджер версий для множества языков (Ruby, Node, Elixir и др.). Удобен, если у вас мульти-языковая среда.
- Docker — запуск Rails в контейнере даёт воспроизводимость окружения; полезно для CI и продакшен‑деплоя.
flowchart TD
A[Начальная задача] --> B{Нужна ли изоляция версий Ruby?}
B -- Да --> C[rbenv или asdf]
B -- Нужна расширенная изоляция --> D[RVM]
B -- Окружение в контейнере --> E[Docker]
C --> F[Выбор rbenv]
D --> F
E --> FМодель мышления и heuristics
- Разделяйте конфигурацию и секреты: храните пароли в переменных окружения, а не в репозитории.
- Используйте rbenv для разработки и Docker для тестов/CI/деплоя — так вы получите гибкость и воспроизводимость.
- Применяйте принцип наименьших привилегий для БД: создать роль с минимально необходимыми правами для приложения.
Факты и ключевые номера
- Базовая версия Ubuntu в руководстве: 22.04.
- Пример Ruby: 3.1.2.
- Пример Rails: 7.0.2.4.
- Порт Rails в development по умолчанию: 3000.
- Порт PostgreSQL по умолчанию: 5432.
Контрольный список (роль‑ориентированный)
Разработчик:
- Установлен rbenv и нужная версия Ruby.
- Установлен Bundler и Rails.
- Создан проект rails new и настроен database.yml.
- rake db:create выполняется успешно.
Системный администратор:
- Установлены libpq-dev, build-essential и другие dev‑пакеты.
- PostgreSQL настроен и доступен.
- Настроен firewall/ufw, резервное копирование БД реализовано.
DBA:
- Роль PostgreSQL создана с паролем и нужными привилегиями.
- pg_hba.conf проверен на соответствие безопасности.
Playbook: быстрый план развёртывания (локально -> тест -> прод)
- Локальная разработка: rbenv + PostgreSQL локально.
- CI: собрать контейнер с той же версией Ruby и выполнить bundle install, rake db:migrate, rspec/miniTest.
- Тестовый сервер: деплой контейнера или release с systemd/nginx + puma/unicorn, подключение к тестовой БД.
- Продакшен: безопасные секреты (ENV/vault), HTTPS, резервное копирование БД, мониторинг.
Incident runbook — если приложение не стартует
- Проверить логи приложения (log/development.log или log/production.log).
- Проверить статус БД и подключение: psql -h host -U user -d dbname.
- Проверить переменные окружения: RAILS_ENV, DATABASE_URL, SECRET_KEY_BASE.
- Если ошибки миграций — выполнить rake db:migrate:status и откатить при необходимости rake db:rollback.
- Если проблема в гемах — пересоздать bundle: bundle install –clean и rbenv rehash.
Советы по безопасности и продакшену
- Никогда не храните секреты и пароли в config/database.yml в репозитории. Используйте ENV или менеджер секретов.
- Настройте SSL/TLS на уровне обратного прокси (nginx) и используйте HTTP Strict Transport Security (HSTS).
- Отключите доступ к PostgreSQL извне, если это не требуется, или используйте VPN/частные сети.
- Применяйте регулярные обновления безопасности для системы и гемов.
Совместимость и миграция версий
- При переходе с Rails 5/6 на Rails 7 проверьте совместимость гемов и Ruby. Некоторые гемы могут требовать обновления или замены.
- При обновлении Ruby убедитесь, что гемы пересобираются: bundle install и rbenv rehash.
- Тестируйте миграции в staging перед запуском в production.
Шпаргалка — часто используемые команды
# Проверка версий
ruby -v
rails -v
node -v
yarn -v
# rbenv
rbenv install 3.1.2
rbenv global 3.1.2
rbenv rehash
# Bundler и Rails
gem install bundler
gem install rails -v 7.0.2.4
bundle install
# Управление БД
sudo -u postgres createuser -P alice
rake db:create
rake db:migrate
# Запуск сервера
rails server -b 0.0.0.0Шаблон config/database.yml (минимальный фрагмент для development)
default: &default
adapter: postgresql
encoding: unicode
host: localhost
username: alice
password: <%= ENV['MYAPP_DATABASE_PASSWORD'] || 'mypassword' %>
port: 5432
pool: 5
development:
<<: *default
database: myapp_developmentСовет: в продакшене используйте переменные окружения (DATABASE_URL или отдельные переменные для логина/пароля).
Куда двигаться дальше
- Изучите puma/unicorn для продакшен‑сервера приложений.
- Настройте nginx как обратный прокси и статический сервер для активов.
- Настройте CI/CD конвейер, включающий тесты и миграции.
Заключение
Поздравляем — вы настроили Ruby on Rails на Ubuntu 22.04, установили rbenv и Ruby 3.1.2, установили Bundler и Rails 7, подключили PostgreSQL и создали первый проект. Дальше автоматизируйте окружение (Docker/CI), добавьте мониторинг и настройте безопасное хранение секретов.
Ключевые рекомендации: используйте rbenv для управляемых версий Ruby, храните секреты вне репозитория, тестируйте миграции и применяйте принципы наименьших привилегий для БД.
Похожие материалы
Несколько аккаунтов Skype: Multi Skype Launcher
Журнал для работы: повысить продуктивность
Персональные звуки уведомлений на Android
Скачивание шоу Hulu для офлайн‑просмотра
Microsoft Start: персонализированная новостная лента