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, gemusw.) ü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/shimsstandardmäß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/rubyzuerst finden und anstelle einer anderen rubyausfü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 irbist äquivalent zu rbenv exec irbund ruby -e "puts 42"äquivalent zu rbenv exec ruby -e "puts 42".
Der rbenv execBefehl 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_VERSIONUmgebungsvariable festgelegt ist, bestimmt ihr Wert die zu verwendende Ruby-Version.
- Wenn das aktuelle Arbeitsverzeichnis eine
.rbenv-versionDatei enthält, wird deren Inhalt zum Festlegen der RBENV_VERSIONUmgebungsvariablen verwendet.
- Wenn sich
.rbenv-versionim aktuellen Verzeichnis keine Datei befindet, durchsucht rbenv jedes übergeordnete Verzeichnis nach einer .rbenv-versionDatei, bis es das Stammverzeichnis Ihres Dateisystems erreicht. Wenn einer gefunden wird, wird sein Inhalt verwendet, um die RBENV_VERSIONUmgebungsvariable festzulegen.
- Wenn dies
RBENV_VERSIONimmer noch nicht festgelegt ist, versucht rbenv, es anhand des Inhalts der ~/.rbenv/versionDatei 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 localBefehl können Sie eine projektspezifische Ruby-Version festlegen, mit der eine .rbenv-versionDatei im aktuellen Verzeichnis erstellt wird. Ebenso rbenv globaländert der Befehl die ~/.rbenv/versionDatei.)
Mit einer RBENV_VERSIONUmgebungsvariablen bewaffnet, fügt rbenv ~/.rbenv/versions/$RBENV_VERSION/bindie Vorderseite Ihres hinzu PATHund 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.