Breve spiegazione: rbenv funziona collegandosi al proprio ambiente PATH. Il concetto è semplice, ma il diavolo è nei dettagli; scoop completo di seguito.
In primo luogo, rbenv crea spessori per tutti i comandi ( ruby, irb, rake, geme così via) su tutti i tuoi versioni installate di Ruby. Questo processo si chiama rehashing . Ogni volta che installi una nuova versione di Ruby o installi una gemma che fornisce un comando, esegui rbenv rehashper assicurarti che tutti i nuovi comandi vengano sottoposti a shim.
Questi spessori vivono in una singola directory ( ~/.rbenv/shimsper impostazione predefinita). Per usare rbenv, devi solo aggiungere la directory shims nella parte anteriore del tuo PATH:
export PATH="$HOME/.rbenv/shims:$PATH"
Quindi ogni volta che esegui rubydalla riga di comando o esegui uno script il cui shebang legge #!/usr/bin/env ruby, il tuo sistema operativo lo troverà per ~/.rbenv/shims/rubyprimo ed eseguirà invece di qualsiasi altro rubyeseguibile che potresti aver installato.
Ogni shim è un minuscolo script di Bash che a sua volta viene eseguito rbenv exec. Quindi, con rbenv nel tuo percorso, irbè equivalente a rbenv exec irbed ruby -e "puts 42"è equivalente a rbenv exec ruby -e "puts 42".
Il rbenv execcomando determina quale versione di Ruby si desidera utilizzare, quindi esegue il comando corrispondente per quella versione. Ecco come:
- Se la
RBENV_VERSIONvariabile di ambiente è impostata, il suo valore determina la versione di Ruby da utilizzare.
- Se la directory di lavoro corrente ha un
.rbenv-versionfile, il suo contenuto viene utilizzato per impostare la RBENV_VERSIONvariabile di ambiente.
- Se non ci sono
.rbenv-versionfile nella directory corrente, rbenv cerca un .rbenv-versionfile in ciascuna directory principale fino a quando non raggiunge la radice del filesystem. Se ne viene trovato uno, il suo contenuto viene utilizzato per impostare la RBENV_VERSIONvariabile di ambiente.
- Se non
RBENV_VERSIONè ancora impostato, rbenv tenta di impostarlo utilizzando il contenuto del ~/.rbenv/versionfile.
- Se nessuna versione viene specificata da nessuna parte, rbenv presume che tu voglia utilizzare il "sistema" Ruby, ovvero qualunque versione verrebbe eseguita se rbenv non fosse sul tuo percorso.
(È possibile impostare una versione di Ruby specifica del progetto con il rbenv localcomando, che crea un .rbenv-versionfile nella directory corrente. Allo stesso modo, il rbenv globalcomando modifica il ~/.rbenv/versionfile.)
Armato di una RBENV_VERSIONvariabile d'ambiente, rbenv si aggiunge ~/.rbenv/versions/$RBENV_VERSION/binalla parte anteriore del tuo PATH, quindi esegue il comando e gli argomenti passati a rbenv exec. Ecco!
Per uno sguardo approfondito esattamente cosa succede sotto il cofano, prova a impostare RBENV_DEBUG=1ed eseguire un comando Ruby. Ogni comando di Bash eseguito da rbenv verrà scritto sul tuo terminale.
Ora, rbenv si occupa solo di cambiare versione, ma un florido ecosistema di plug-in ti aiuterà a fare di tutto, dall'installazione di Ruby alla configurazione del tuo ambiente , alla gestione dei "gemset" e persino all'automazionebundle exec .
Non sono sicuro di cosa abbia a che fare il supporto IRC con la commutazione delle versioni di Ruby e rbenv è progettato per essere abbastanza semplice e comprensibile da non richiedere supporto. Ma se hai mai bisogno di aiuto, il tracker dei problemi e Twitter sono solo un paio di clic di distanza.
Divulgazione: sono l'autore di rbenv, ruby-build e rbenv-vars.