Wat is een Ruby Gem?

Toen ik voor het eerst over Ruby Gems hoorde, leken ze me nogal magisch. Door bundle install uit te voeren, kon ik op de een of andere manier deze magische edelstenen verkrijgen die mijn code allerlei dingen zouden laten doen die mijn vaardigheden als week 1 Flatiron-student ver te boven leken te gaan. Net als “item boxes” in Mario Kart lijken edelstenen de gebruiker superkrachten te geven.

Ruby Gems geven je magische krachten!

Ik ben van plan om mijn blog te gebruiken om dieper in te gaan op programmeerconcepten die mijn nieuwsgierigheid wekken en die ik niet helemaal begrijp. Voor mijn eerste blog post, ga ik het mystieke, magische karakter van Ruby gems ontkrachten.

Wat is een Ruby Gem?

Nee, Ruby gems zijn niet magisch. Het zijn gewoon open source bibliotheken die Ruby code bevatten en zijn verpakt met een beetje extra gegevens . Met behulp van een gem kan een programmeur de code in de gem gebruiken in hun eigen programma, zonder expliciet die code in te voegen.

Gems kunnen worden gebruikt voor allerlei doeleinden, en u kunt verschillende gems verkennen op https://rubygems.org/. Om een beter idee te krijgen van wat gems kunnen doen, zijn hier een paar populaire gems en hun functionaliteit:

  • Bundler – Zorgt voor een consistente omgeving voor Ruby-projecten door het bijhouden en installeren van de exacte gems en versies die nodig zijn. Het is de #1 gedownloade gem aller tijden, maar later meer over Bundler.
  • RSpec – Een test framework dat Behavior Driven Development voor Ruby ondersteunt.
  • Devise – Devise werkt met authenticatie. Voor elke website die moet gebruikers log-in’s, Devise behandelt aanmelden, aanmelden, reset wachtwoord, etc.
  • JSON – Biedt een API voor parsing JSON van tekst.
  • Nokogiri – Biedt HTML, XML, SAX, en Reader parsers met XPath en CSS selector ondersteuning.
  • Rails – Rails is een juweeltje! Rails biedt de fullstack framework waarmee Ruby kan worden omgezet in webapplicaties.

Installeren Gems

Heden ten dage, het gebruik van gems is eenvoudig! Gems lokaal installeren is zo simpel als een enkel commando: gem install . Het install commando haalt de code op, download het naar uw computer, en installeert de gem en alle benodigde afhankelijkheden. Tenslotte wordt de documentatie voor de geïnstalleerde gems gemaakt.

Installatie van bundler vereist slechts installatie van 1 gem

Terwijl sommige gems, zoals Bundler, slechts de installatie van 1 gem vereisen, hebben andere gems afhankelijkheden die de installatie van meerdere gems vereisen:

Om Draper te installeren was ook de installatie van de Request Store en de Active Model Serializers gems

Om alle lokaal geïnstalleerde gems te zien, gebruikt u het commando, gem list .

Gems gebruiken

Nu, belangrijker nog, hoe kunnen we onze geïnstalleerde gems gebruiken? Nou, dat hangt af van het type gem. Sommige gems, zoals Rails, zijn stand-alone Ruby programma’s die u kunt uitvoeren vanaf het commando.

Anderen zijn relatief nutteloos op hun eigen, maar ongelooflijk nuttig wanneer gebruikt binnen een project. Om een gem vanuit uw code te gebruiken, is het nodig om het eerst bovenaan het bestand te vereisen – require 'gem_name' . Pry is bijvoorbeeld al snel een van mijn favoriete juweeltjes geworden bij het werken aan projecten. Mijn code i̶s̶n̶’̶t̶ ̶a̶l̶w̶a̶y̶s̶ is bijna nooit correct als ik hem voor het eerst schrijf, en Pry maakt het debuggen veel efficiënter en een beetje minder pijnlijk. De afgelopen week hebben we geleerd over API’s en hadden we Pry en een paar andere edelstenen nodig om het project af te ronden.

Hoewel edelstenen erg eenvoudig zijn als je ze alleen op je computer nodig hebt, worden ze iets gecompliceerder als je je project wilt distribueren of publiceren. Iedereen die uw project uitvoert zal alle benodigde gems en de juiste versies op zijn computer geïnstalleerd moeten hebben. Gelukkig hebben we RubyGems en Bundler die het proces stroomlijnen.

RubyGems is het Framework dat Gem Sharing vereenvoudigt

Deel van de magie van gems is dat we ze allemaal kunnen gebruiken, en RubyGems is de package manager die dat mogelijk maakt. Het biedt een standaard formaat voor het distribueren van Ruby gems, beheert de installatie van gems, en een server voor het distribueren ervan. RubyGems werd pas op 14 maart 2004 (pi-dag! π) vrijgegeven aan het publiek. Hoewel RubyGems al sinds Ruby 1.8 bestaat, was het geen onderdeel van de standaard Ruby distributie tot Ruby 1.9. Dus voor Ruby nieuwelingen, zoals ikzelf, wordt RubyGems automatisch op je computer geïnstalleerd als je Ruby installeert.

Hoe hebben Rubyisten ooit zonder RubyGems kunnen leven?

Het leven was een stuk moeilijker. Als je het volledige verhaal wilt, raad ik je ten zeerste aan André Arko’s presentatie “How does Bundler work, anyway?” van de RailsConf 2015 te bekijken. Hier is mijn samengevatte versie:

Het laden van codering begon met require , en het gebruik van require is in wezen hetzelfde als het invoegen van de code in uw bestand. In zijn eenvoudigste vorm is het een methode die code uit het argumentbestand haalt.

def require(filename)
eval File.name(filename)
end

Require stelt gebruikers in staat om elke lokale code te laden, door in $LOAD_PATH van de gebruiker naar het bestand te zoeken. $LOAD_PATH is een globale variabele en een array van absolute paden. Zolang de directory van de code zich ergens binnen $LOAD_PATH bevindt, kan require het vinden.

While require is geweldig voor lokale code, maar wat als je code van iemand anders wilde halen? Het was een vervelend proces – je zou de code moeten vinden, downloaden, ergens op je computer opslaan en dat ergens toevoegen aan de $LOAD_PATH.

Als gevolg daarvan is setup.rb geëvolueerd om het proces te vergemakkelijken. Setup.rb (die er vandaag de dag nog steeds is) is een generiek installatieprogramma voor Ruby scripts en bibliotheken. Het was een grote verbetering ten opzichte van require omdat het alle Ruby bestanden kopieerde naar een directory die al in het $LOAD_PATH stond. Ontwikkelaars zijn van nature lui, en setup.rb bespaarde ons een paar stappen. Echter, setup.rb had zijn eigen set van problemen. Er was geen versie-tracking en geen manier om een programma te verwijderen! De enige definitieve manier om te weten welke versie je had, was om het versienummer op te schrijven bij de installatie. Zoals u zich kunt voorstellen, was het gebruik van bibliotheken een ramp.

In 2004 kwam RubyGems als geroepen! Nu kon andermans code, of gems, worden geïnstalleerd of verwijderd met een enkel commando! Het was revolutionair. RubyGems had nog een truc achter de hand – het kon omgaan met verschillende versies van software, en elke versie werd bewaard in zijn eigen aparte map.

Bundler Lost Gem Dependencies

Zo ongelooflijk als RubyGems leek, het had een inherente tekortkoming. Als je een project wilde delen, hoe zorgde je er dan voor dat een nieuwe gebruiker alle benodigde gems had? Met de huidige opzet van RubyGems, als een ontwikkelaar gem install foo draaide en een nieuwe gem in de applicatie ging gebruiken, moesten andere ontwikkelaars op het project verteld worden om gem install foo te draaien. Bepaalde gems konden alleen werken met bepaalde versies van andere gems, en het werd steeds moeilijker om gem en versie afhankelijkheden te coördineren.

Alas, we komen bij Bundler! Bundler bestaat om het probleem van gem versie afhankelijkheid op te lossen door de exacte gems en versies die nodig zijn op te sporen en te installeren. Bundler werkt via de “gemfile” van een Ruby gem, die Bundler vertelt naar welke gems hij moet zoeken en waar hij ze moet zoeken. https://rubygems.org is de standaard bron, maar als er gems bestaan op een private server, kan die bron overschreven worden voor die specifieke gems.

Voorbeeld Gemfile – Bron: http://bundler.io/rationale.html

Nadat de benodigde gems zijn geïnstalleerd (als uw computer deze nog niet heeft), schrijft Bundler alle geïnstalleerde gems en versies weg naar een ander bestand, Gemfile.lock. Dit lock bestand maakt het mogelijk om exact dezelfde versies te installeren op elke machine die de applicatie draait.

Het gebruik van Bundler is simpel. Eerst is het nodig om het te installeren, en omdat Bundler zelf een gem is, kunnen we dat doen met: gem install bundler . Met Bundler geinstalleerd, kunt u elke gem in uw eigen project gebruiken in 2 stappen:

  1. Voeg de gem toe aan een Gemfile in in de root van uw project
  2. Run bundle install in uw terminal

Voor meer Bundler-specifieks, kijk op http://bundler.io/.

Geef een antwoord

Het e-mailadres wordt niet gepubliceerd.