Ein Shim ist eine kleine Bibliothek, die Aufrufe einer anderen Bibliothek abfängt und ändert, hauptsächlich um die Kompatibilität zu unterstützen.
Die Pflege mehrerer Versionen einer Bibliothek ist notwendig, um Ihre Kunden zu unterstützen. Shim-Bibliotheken übersetzen alte in neue Bibliotheksaufrufe, bevor sie an die neue Bibliothek weitergeleitet werden.
Beispiel 1:
Linux-Installationen werden normalerweise mit einer einzigen Ruby-Version ausgeliefert. Ruby-Entwickler müssen unterschiedliche Ruby-Versionen für ihre vielen aktiven Projekte haben. Rbenv verwendet Shims, um dieses Problem zu lösen.
Einen Ruby—Befehl unter Linux auszuführen bedeutet, nach der ausführbaren Datei im Pfad zu suchen – den er von links nach rechts durchsucht. Das Ausführen des Ruby-Befehls rails server
bedeutet, dass Linux Rails, eine ausführbare Ruby-Datei, im ersten Verzeichnis findet und ausführt.
Rbenv fügt ein shims
Verzeichnis hinzu und lädt es mit Shim-Skripten bevor Sie den Pfad voranstellen. Für jede Ruby-Anwendung gibt es ein Shim-Skript, und das Ausführen einer Ruby-Anwendung bedeutet jetzt, das passende Shim-Skript auszuführen. Das Ausführen von Rails bedeutet also, das Rails-Skript im Verzeichnis shims
und nicht die Rails-Anwendung in usr/local/bin
. Das Skript ermittelt die erforderliche Ruby-Version und führt dann die passende Anwendung, in diesem Fall Rails, unter dieser erwarteten Ruby-Version aus.