en shim är ett litet bibliotek som avlyssnar och ändrar samtal till ett annat bibliotek, främst för att underlätta kompatibilitet.
att behålla flera versioner av ett bibliotek är nödvändigt för att stödja dina kunder. Shim-bibliotek översätter gamla till nya bibliotekssamtal innan de vidarebefordras till det nya biblioteket.
exempel 1:
Linux-installationer levereras normalt med en enda Ruby-version. Ruby utvecklare måste ha olika Ruby versioner på sina många aktiva projekt. Rbenv använder shims för att lösa detta problem.
att köra ett Ruby-kommando i Linux innebär att man söker efter den körbara filen i sökvägen-som den söker från vänster till höger. Så att köra Ruby-kommandot rails server
betyder att Linux hittar och kör Rails, en Ruby-körbar, i den första katalogen.
Rbenv lägger till en shims
katalog och laddar den med shim skript innan prepending sökvägen. Det finns ett shim-skript för varje Ruby-applikation och att köra en Ruby-applikation betyder nu att du kör det matchande shim-skriptet. Så, running rails betyder att köra Rails-skriptet i katalogen shims
och inte Rails-applikationen i usr/local/bin
. Skriptet fungerar den nödvändiga Ruby-versionen och kör sedan dess matchande applikation, I detta fall Rails, under den förväntade Ruby-versionen.
exempel 2:
Microsoft använder shims för att förfalska en applikations Windows-samtal. När ETT program gör ett systemanrop går det igenom ’importera adresstabell’.
Du kan ändra tabellen och ersätta Windows-samtalet med ett samtal till en shim. Shim i exemplet är en ’version-lie’ shim. Applikationen tycker att den är på en Windows 7-maskin.