Krótkie wyjaśnienie: rbenv działa poprzez podłączanie się do pliku środowiska PATH. Koncepcja jest prosta, ale diabeł tkwi w szczegółach; pełna miarka poniżej.
Po pierwsze, rbenv tworzy podkładek dla wszystkich poleceń ( ruby, irb, rake, gemi tak dalej) we wszystkich zainstalowanych wersji Ruby. Ten proces nazywa się ponownym haszowaniem . Za każdym razem, gdy instalujesz nową wersję Rubiego lub instalujesz klejnot, który udostępnia polecenie, uruchom, rbenv rehashaby upewnić się, że wszystkie nowe polecenia są podklejone.
Te podkładki znajdują się w jednym katalogu ( ~/.rbenv/shimsdomyślnie). Aby użyć rbenv, wystarczy dodać katalog shims na początku PATH:
export PATH="$HOME/.rbenv/shims:$PATH"
Następnie za każdym razem, gdy uruchamiasz rubyz wiersza poleceń lub uruchamiasz skrypt, którego shebang czyta #!/usr/bin/env ruby, twój system operacyjny znajdzie ~/.rbenv/shims/rubypierwszy i uruchomi go zamiast dowolnego innego rubyzainstalowanego pliku wykonywalnego.
Każda podkładka to mały skrypt Bash, który z kolei działa rbenv exec. Więc z rbenv na twojej ścieżce, irbjest równoważne rbenv exec irbi ruby -e "puts 42"jest równoważne rbenv exec ruby -e "puts 42".
Te rbenv execdane polecenie, co wersja Ruby, którego chcesz użyć, a następnie uruchamia odpowiednie polecenie dla tej wersji. Oto jak:
- Jeśli
RBENV_VERSIONzmienna środowiskowa jest ustawiona, jej wartość określa wersję Rubiego, której chcesz użyć.
- Jeśli bieżący katalog roboczy zawiera
.rbenv-versionplik, jego zawartość jest używana do ustawiania RBENV_VERSIONzmiennej środowiskowej.
- Jeśli
.rbenv-versionw bieżącym katalogu nie ma pliku, rbenv przeszukuje każdy katalog nadrzędny w poszukiwaniu .rbenv-versionpliku, dopóki nie trafi on do katalogu głównego twojego systemu plików. Jeśli taki zostanie znaleziony, jego zawartość jest używana do ustawienia RBENV_VERSIONzmiennej środowiskowej.
- Jeśli
RBENV_VERSIONnadal nie jest ustawiona, rbenv próbuje ją ustawić używając zawartości ~/.rbenv/versionpliku.
- Jeśli nigdzie nie podano wersji, rbenv zakłada, że chcesz użyć "systemowego" Rubiego - tj. Dowolnej wersji, która byłaby uruchomiona, gdyby rbenv nie był na twojej ścieżce.
(Możesz ustawić wersję Ruby specyficzną dla projektu za pomocą rbenv localpolecenia, które tworzy .rbenv-versionplik w bieżącym katalogu. Podobnie rbenv globalpolecenie modyfikuje ~/.rbenv/versionplik.)
Uzbrojony w RBENV_VERSIONzmienną środowiskową, rbenv dodaje ~/.rbenv/versions/$RBENV_VERSION/binna początku twojego PATH, a następnie wykonuje polecenie i argumenty przekazane do rbenv exec. Voila!
Aby dokładnie przyjrzeć się temu, co dzieje się pod maską, spróbuj ustawić RBENV_DEBUG=1i uruchomić polecenie Ruby. Każde polecenie Bash, które uruchomi rbenv, zostanie zapisane na twoim terminalu.
Teraz rbenv zajmuje się tylko przełączaniem wersji, ale dobrze prosperujący ekosystem wtyczek pomoże Ci zrobić wszystko, od instalacji Rubiego po konfigurację środowiska , zarządzanie "gemsetami", a nawet automatyzacjębundle exec .
Nie jestem do końca pewien, co ma wspólnego obsługa IRC ze zmianą wersji Rubiego, a rbenv został zaprojektowany tak, aby był na tyle prosty i zrozumiały, że nie wymagał wsparcia. Ale jeśli kiedykolwiek będziesz potrzebować pomocy, narzędzie do śledzenia problemów i Twitter to tylko kilka kliknięć.
Ujawnienie: jestem autorem rbenv, ruby-build i rbenv-vars.