Ruby — штука красивая. Код пишется как стихи, баги лезут как тараканы, а документация — как всегда, либо божественная, либо устаревшая на пять лет. На Ubuntu 20.04 его можно впендюрить тремя способами: по-быстрому через apt, через лёгкий и понятный rbenv или через монстра RVM, который тащит за собой полмира.
Я расскажу, как это сделать без соплей. Ты сам выберешь — хочешь просто, хочешь с возможностью переключать версии, хочешь с оверкиллом. Но предупреждаю: на каждом шаге тебя могут ждать свои приколы.
Вариант 1. Быстрый и тупой: apt
Хочешь просто чтобы работало? Плевать на последние версии? Тогда так:
sudo apt update
sudo apt install ruby-full
ruby --version
Да, всё.
Вариант 2. Лёгкий и гибкий: rbenv
Если тебе надо гонять несколько версий Ruby и не лезть в ад зависимостей — бери rbenv. Он не пытается быть всем на свете, делает одну вещь и делает её нормально.
Ставим зависимости, чтобы потом не было «undefined reference» и прочей фигни при компиляции:
sudo apt update
sudo apt install git curl autoconf bison build-essential \
libssl-dev libyaml-dev libreadline6-dev zlib1g-dev \
libncurses5-dev libffi-dev libgdbm6 libgdbm-dev libdb-dev
Дальше — магия:
curl -fsSL https://github.com/rbenv/rbenv-installer/raw/HEAD/bin/rbenv-installer | bash
Теперь добавляем rbenv в PATH (Bash или Zsh — выбирай свой яд):
# Bash echo 'export PATH="$HOME/.rbenv/bin:$PATH"' >> ~/.bashrc
echo 'eval "$(rbenv init -)"' >> ~/.bashrc
source ~/.bashrc
# Zsh echo 'export PATH="$HOME/.rbenv/bin:$PATH"' >> ~/.zshrc
echo 'eval "$(rbenv init -)"' >> ~/.zshrc
source ~/.zshrc
Проверяем, что всё живо:
rbenv -v
Смотрим, что можно поставить:
rbenv install -l
Например, Ruby 2.7.1:
rbenv install 2.7.1
rbenv global 2.7.1
Всё. rbenv кладёт шельмовые «shims» в PATH, и Ruby выбирается так, как ты сказал:
- Глобально —
rbenv global X.Y.Z - Локально в проекте —
rbenv local X.Y.Z - На время сессии —
rbenv shell X.Y.Z
Главное — забудь про sudo gem install, если юзаешь rbenv. Всё ставится в домашнюю папку.
Вариант 3. Толстый и прожорливый: RVM
Если тебе мало просто переключения версий и хочется ещё 100500 функций, бери RVM. Он тащит за собой тонну всего, зато умеет всё подряд.
Ставим зависимости:
sudo apt update
sudo apt install curl g++ gcc autoconf automake bison libc6-dev \
libffi-dev libgdbm-dev libncurses5-dev libsqlite3-dev libtool \
libyaml-dev make pkg-config sqlite3 zlib1g-dev libgmp-dev \
libreadline-dev libssl-dev
Подписываемся на ключи:
curl -sSL https://rvm.io/mpapis.asc | gpg --import -
curl -sSL https://rvm.io/pkuczynski.asc | gpg --import -
Ставим RVM:
curl -sSL https://get.rvm.io | bash -s stable
Подгружаем окружение:
source ~/.rvm/scripts/rvm
Смотрим, что есть:
rvm list known
Ставим Ruby (по дефолту — последнюю):
rvm install ruby
rvm --default use ruby
Хочешь конкретную версию?
rvm install ruby-3.1.2
rvm --default use ruby-3.1.2
И да, RVM может жрать память и пакостить PATH. Но если у тебя десяток проектов на разных версиях и нужен полный контроль — оно того стоит.
Итог
- Хочешь «поставил и забыл» — apt.
- Хочешь минимум лишнего, максимум контроля над версиями — rbenv.
- Хочешь all-inclusive и готов терпеть жир — RVM.
0 комментариев