Jeg har brugt Ruby Gems i et par uger nu, og det har været fantastisk, men jeg var ikke helt sikker på, hvad der skete under motorhjelmen, når jeg tilføjede en til min applikation. Så dette blogindlæg skal hjælpe mig med at forstå, hvordan gems fungerer og forhåbentlig også hjælpe dig.
En ruby-gem er pakket ruby-kode, som du kan tilføje til din applikation. Dette kan spare dig noget tid ved at bruge kode, som andre har skrevet for at løse lignende problemer. Hvis du f.eks. ønsker at ændre farven på noget tekst, kan du installere og bruge colorize-gem’en. Du får alle dens funktioner uden nogensinde at skulle skrive den kode selv.
Sinatra er en perle, Rack er en perle, og jeg blev overrasket over at lære, at selv Rails er en perle. Alle offentlige gems bliver offentliggjort gennem RubyGems.org. Det er her, folk kan bidrage og dele dem med fællesskabet.
Lad os starte med at installere en gem
Vælg en gem, og lad os installere den. Jeg valgte at tilføje colorize-perlen til min applikation, som ændrer farven på en streng, som vi sender ind. Du kan køre gem install gem_name for at downloade gem’en til din computer og gøre den tilgængelig for dine programmer. Spekulerer du på, hvor den perle bor, når den er installeret? Du kan køre gem which gem_name, og den vil fortælle dig præcis, hvor den befinder sig.
For at bruge gem’en i vores kode skal du kræve gem’en øverst i din fil ved at sætte require ‘gem_name’. Det gør vi, så vi har adgang til gem’en, og nu behøver vi ikke at skrive vores egen kode for at farvelægge tekst.
Nu hvor du har installeret og required gem’en, kan du bruge den. Hvis du går til perleens GitHub-repo, vil du typisk finde vigtige oplysninger om dens funktioner og hvordan du bruger dem.
Lad os bruge den!
Så vi har læst readme, og nu vil vi gerne tilføje noget farve til vores tekst. Jeg har tilføjet tre forskellige farver i min kode, ved at kalde .colorze(:color) på en streng.
Glimrende! Ser det ikke flot ud? Så vi har installeret vores gem, og det ser ud til at virke, men hvad nu hvis vi har et større program, der kræver mange gems? At kalde gem install og kræve hver enkelt gem virker som en masse arbejde. Der er helt sikkert en nemmere måde.
Bundler
Bundler gør vores liv meget nemmere. Hvad er bundler? Tja, det er selvfølgelig en perle! Den sporer hver enkelt gem og installerer præcis den gem og den version, som du skal bruge i din applikation. For at bruge bundler skal du bruge en Gemfile i mappen for dit projekt, og indeni kan du liste så mange gems som du vil. For at gøre det skal du blot åbne Gemfile og tilføje gem ‘gem_name’.
Når du har tilføjet den til din Gemfile, skal du sørge for at køre bundle install i din terminal. Dette vil installere alle de gems, der er opført i din Gemfile, sammen med deres afhængigheder. Det gør i hvert fald tingene meget nemmere. Det gode er, at Ruby 2.6 og nyere indeholder bundler automatisk, så du behøver ikke selv at installere det.
Det ser ud til, at vi stadig skal tilføje require ‘gem_file’ øverst i vores filer, og det virker også som en masse arbejde, hvis vi har mange af dem. Det viser sig, at bundler også har tænkt på dette. Du kan tilføje require ‘bundler’ øverst i din .rb-fil og skrive Bunlder.require(:default). Hvad dette gør under motorhjelmen er at kalde require ‘gem_name’ for hver perle, du har i din gemfil.
Når du har kørt bundle install, vil du måske bemærke, at der bliver installeret en masse perler, du ikke har tilføjet. Hvorfor er det sådan? Mange perler kræver, at andre perler bliver installeret sammen med dem. For eksempel vil rails kræve mange andre perler, og disse perler kan kræve andre perler og så videre. Bundler sørger for, at alle de installerede perleversioner er kompatible med hinanden.
Når den har fundet de korrekte versioner af hver perle, registrerer den disse versioner i en anden fil kaldet Gemfile.lock. Det gør det muligt at installere nøjagtig den samme version på alle de maskiner, der skal køre programmet.
Du kan se i min Gemfile.lock, at lolize kræver paint-gem’en og de versioner, som den kan bruge. Så bundler vil hente den og den korrekte version til os. Er det ikke nyttigt? Tak bundler!
Så det er det! Jeg håber, at dette har hjulpet dig med at forstå det grundlæggende i en gem og bundler. Der er mange gems derude, som du kan bruge, og du kan søge efter dem her. https://rubygems.org/.