Коротке пояснення: rbenv працює, підключаючись до вашого оточення PATH
. Концепція проста, але чорт у деталях; повний совок нижче.
По- перше, rbenv створює регулювальні шайби для всіх команд ( ruby
, irb
, rake
, gem
і т.д.) у всіх встановлених версій Ruby. Цей процес називається повторним проходженням . Кожен раз, коли ви встановлюєте нову версію Ruby або встановлюєте дорогоцінний камінь, який забезпечує команду, запустіть, rbenv rehash
щоб переконатися, що будь-які нові команди прошиті.
Ці прокладки живуть в одному каталозі ( ~/.rbenv/shims
за замовчуванням). Щоб використовувати rbenv, вам потрібно лише додати каталог shims на передню частину вашого PATH
:
export PATH="$HOME/.rbenv/shims:$PATH"
Тоді, коли ви запустите ruby
командний рядок або запустите скрипт, чий шебанг читається #!/usr/bin/env ruby
, ваша операційна система знайде ~/.rbenv/shims/ruby
першим і запустить його замість будь-якого іншого ruby
виконуваного файлу, який ви, можливо, встановили.
Кожна лайка - це крихітний сценарій Баша, який у свою чергу працює rbenv exec
. Отже, з rbenv на вашому шляху irb
еквівалентний rbenv exec irb
і ruby -e "puts 42"
еквівалентний rbenv exec ruby -e "puts 42"
.
Ці rbenv exec
цифри команди, яка версія Ruby , яку ви хочете використовувати, а потім запускає відповідну команду для цієї версії. Ось як:
- Якщо
RBENV_VERSION
змінна середовища встановлена, її значення визначає версію Ruby, яку слід використовувати.
- Якщо в поточному робочому каталозі є
.rbenv-version
файл, його вміст використовується для встановлення RBENV_VERSION
змінної середовища.
- Якщо
.rbenv-version
у поточному каталозі немає файлу, rbenv шукає файл кожного батьківського каталогу, .rbenv-version
поки він не потрапить у корінь вашої файлової системи. Якщо такий знайдено, його вміст використовується для встановлення RBENV_VERSION
змінної середовища.
- Якщо
RBENV_VERSION
все ще не встановлено, rbenv намагається встановити його, використовуючи вміст ~/.rbenv/version
файлу.
- Якщо ніде не вказана версія, rbenv припускає, що ви хочете використовувати "системний" Ruby - тобто будь-яку версію запускати, якби rbenv не був на вашому шляху.
(Ви можете встановити проектну версію Ruby за допомогою rbenv local
команди, яка створює .rbenv-version
файл у поточному каталозі. Аналогічно, rbenv global
команда змінює ~/.rbenv/version
файл.)
Озброївшись RBENV_VERSION
змінною оточення, rbenv додає ~/.rbenv/versions/$RBENV_VERSION/bin
на передню частину вашого PATH
, а потім виконує команду та аргументи, передані до rbenv exec
. Вуаля!
Для ретельного вивчення того, що саме відбувається під кришкою, спробуйте встановити RBENV_DEBUG=1
та запустити команду Ruby. Кожна команда Bash, яку виконує rbenv, буде записана у ваш термінал.
Тепер rbenv просто займається переключенням версій, але процвітаюча екосистема плагінів допоможе вам зробити все, від встановлення Ruby до налаштування вашого середовища , управління "gemsets" і навіть автоматизаціїbundle exec
.
Я не зовсім впевнений, яка підтримка IRC пов'язана з перемиканням версій Ruby, і rbenv розроблений таким чином, щоб бути простим і зрозумілим, щоб не вимагати підтримки. Але якщо вам коли-небудь потрібна допомога, трекер випусків і Twitter - це лише кілька кліків.
Розкриття інформації: Я автор rbenv, ruby-build та rbenv-vars.