Kurze Erklärung: rbenv funktioniert, indem es sich in die Umgebung einfügt PATH
. Das Konzept ist einfach, aber der Teufel steckt im Detail; volle Schaufel unten.
Zuerst rbenv schafft Beilagen für alle Befehle ( ruby
, irb
, rake
, gem
usw.) über alle installierten Versionen von Ruby. Dieser Vorgang wird als Aufwärmen bezeichnet . Führen Sie jedes Mal, wenn Sie eine neue Version von Ruby installieren oder ein Juwel installieren, das einen Befehl bereitstellt, aus rbenv rehash
, um sicherzustellen, dass alle neuen Befehle abgeglichen werden.
Diese Shims befinden sich ( ~/.rbenv/shims
standardmäßig) in einem einzigen Verzeichnis . Um rbenv zu verwenden, müssen Sie nur das Shims-Verzeichnis an der Vorderseite Ihres PATH
:
export PATH="$HOME/.rbenv/shims:$PATH"
Jedes Mal, wenn Sie ruby
über die Befehlszeile ausführen oder ein Skript ausführen, dessen Shebang lautet #!/usr/bin/env ruby
, wird Ihr Betriebssystem es ~/.rbenv/shims/ruby
zuerst finden und anstelle einer anderen ruby
ausführbaren Datei ausführen, die Sie möglicherweise installiert haben.
Jeder Shim ist ein winziges Bash-Skript, das wiederum ausgeführt wird rbenv exec
. Also mit rbenv auf Ihrem Weg irb
ist äquivalent zu rbenv exec irb
und ruby -e "puts 42"
äquivalent zu rbenv exec ruby -e "puts 42"
.
Der rbenv exec
Befehl ermittelt, welche Version von Ruby Sie verwenden möchten, und führt dann den entsprechenden Befehl für diese Version aus. Hier ist wie:
- Wenn die
RBENV_VERSION
Umgebungsvariable festgelegt ist, bestimmt ihr Wert die zu verwendende Ruby-Version.
- Wenn das aktuelle Arbeitsverzeichnis eine
.rbenv-version
Datei enthält, wird deren Inhalt zum Festlegen der RBENV_VERSION
Umgebungsvariablen verwendet.
- Wenn sich
.rbenv-version
im aktuellen Verzeichnis keine Datei befindet, durchsucht rbenv jedes übergeordnete Verzeichnis nach einer .rbenv-version
Datei, bis es das Stammverzeichnis Ihres Dateisystems erreicht. Wenn einer gefunden wird, wird sein Inhalt verwendet, um die RBENV_VERSION
Umgebungsvariable festzulegen.
- Wenn dies
RBENV_VERSION
immer noch nicht festgelegt ist, versucht rbenv, es anhand des Inhalts der ~/.rbenv/version
Datei festzulegen .
- Wenn nirgendwo eine Version angegeben ist, geht rbenv davon aus, dass Sie den Ruby "System" verwenden möchten - dh welche Version auch immer ausgeführt wird, wenn sich rbenv nicht in Ihrem Pfad befindet.
(Mit dem rbenv local
Befehl können Sie eine projektspezifische Ruby-Version festlegen, mit der eine .rbenv-version
Datei im aktuellen Verzeichnis erstellt wird. Ebenso rbenv global
ändert der Befehl die ~/.rbenv/version
Datei.)
Mit einer RBENV_VERSION
Umgebungsvariablen bewaffnet, fügt rbenv ~/.rbenv/versions/$RBENV_VERSION/bin
die Vorderseite Ihres hinzu PATH
und führt dann den Befehl und die Argumente aus, an die übergeben wird rbenv exec
. Voila!
Versuchen Sie RBENV_DEBUG=1
, einen Ruby-Befehl festzulegen und auszuführen, um genau zu sehen, was unter der Haube passiert . Jeder Bash-Befehl, den rbenv ausführt, wird in Ihr Terminal geschrieben.
Jetzt befasst sich rbenv nur noch mit dem Wechseln von Versionen, aber ein florierendes Ökosystem von Plugins hilft Ihnen dabei, alles zu tun, von der Installation von Ruby über die Einrichtung Ihrer Umgebung , die Verwaltung von "Gemsets" bis hin zur Automatisierungbundle exec
.
Ich bin mir nicht ganz sicher, was die IRC-Unterstützung mit dem Wechsel von Ruby-Versionen zu tun hat, und rbenv ist so konzipiert, dass es einfach und verständlich genug ist, um keine Unterstützung zu benötigen. Sollten Sie jemals Hilfe benötigen, sind der Issue-Tracker und Twitter nur ein paar Klicks entfernt.
Offenlegung: Ich bin der Autor von rbenv, ruby-build und rbenv-vars.