Коротке пояснення: 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.