Краткое объяснение: rbenv работает, подключаясь к PATH
вашей среды.Концепция проста, но дьявол кроется в деталях;полный текст приведен ниже.
Сначала rbenv создает прокладки для всех команд (ruby
, irb
, rake
, gem
и т. д.) во всех установленных версиях.рубина.Этот процесс называется Перефразировка .Каждый раз, когда вы устанавливаете новую версию Ruby или устанавливаете гем, который предоставляет команду, запускайте rbenv rehash
, чтобы убедиться, что все новые команды подкладываются.
Эти прокладки живут в одном каталоге (~/.rbenv/shims
по умолчанию).Чтобы использовать rbenv, вам нужно всего лишь добавить каталог shims в начало вашего PATH
:
export PATH="$HOME/.rbenv/shims:$PATH"
Затем каждый раз, когда вы запускаете ruby
из командной строки или запускаете скрипт, чей shebang читает #!/usr/bin/env ruby
, ваша операционная система сначала найдет ~/.rbenv/shims/ruby
и запустит ее вместо любого другого исполняемого файла ruby
, который вы, возможно, установили.
Каждый шим представляет собой крошечный скрипт Bash, который, в свою очередь, запускает 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 *От 1073 * до настройка среды , управление "наборами гемов" и даже автоматизация bundle exec
.
Я не совсем уверен, какой IRCподдержка связана с переключением версий Ruby, а rbenv разработан так, чтобы быть простым и достаточно понятным, чтобы не требовать поддержки.Но если вам когда-нибудь понадобится помощь, система отслеживания проблем и Twitter находятся всего в нескольких щелчках мыши.
Раскрытие информации: я являюсь автором rbenv, ruby-build и rbenv-vars. * * 1087