Ce este o piatră prețioasă de rubin?

Când am aflat pentru prima dată despre pietrele prețioase de rubin, acestea păreau destul de magice. Rulând bundle install puteam cumva să dobândesc aceste pietre magice care îmi făceau codul să facă tot felul de lucruri care păreau mult peste abilitățile mele de student Flatiron din prima săptămână. Asemănătoare „cutiilor de obiecte” din Mario Kart, pietrele prețioase par să confere superputeri utilizatorului.

Gemelele Ruby îți dau puteri magice!

Întentionez să-mi folosesc blogul pentru a aprofunda conceptele de programare care îmi stârnesc curiozitatea și pe care nu le înțeleg pe deplin. Pentru prima mea postare pe blog, am de gând să demontez natura mistică, magică a gemelor Ruby.

Ce este o gemă Ruby?

Nu, gemele Ruby nu sunt magice. Ele sunt pur și simplu biblioteci open source care conțin cod Ruby și sunt împachetate cu câteva date suplimentare . Folosirea unei pietre prețioase permite unui programator să folosească codul din cadrul bijuteriei în propriul program, fără a insera în mod explicit acel cod.

Gemele pot fi folosite în tot felul de scopuri și puteți explora diferite pietre prețioase la https://rubygems.org/. Pentru a vă face o idee mai bună despre ce pot face gemele, iată câteva geme populare și funcționalitatea lor:

  • Bundler – Oferă un mediu coerent pentru proiectele Ruby prin urmărirea și instalarea gemelor și versiunilor exacte de care este nevoie. Este gemul nr. 1 descărcat din toate timpurile, dar mai multe despre Bundler mai târziu.
  • RSpec – Un cadru de testare care susține Behavior Driven Development pentru Ruby.
  • Devise – Devise lucrează cu autentificarea. Pentru orice site web care are nevoie de autentificarea utilizatorilor, Devise se ocupă de sign in, sign up, resetarea parolei, etc.
  • JSON – Oferă un API pentru analiza JSON din text.
  • Nokogiri – Oferă analizoare HTML, XML, SAX și Reader cu suport pentru XPath și selectori CSS.
  • Rails – Rails este o bijuterie! Rails oferă cadrul fullstack care permite ca Ruby să fie transformat în aplicații web.

Instalarea gemelor

Astăzi, utilizarea gemelor este ușoară! Instalarea gems la nivel local este la fel de simplă ca o singură comandă: gem install . Comanda install preia codul, îl descarcă pe computerul dumneavoastră și instalează gemul și toate dependențele necesare. În cele din urmă, va construi documentația pentru gemurile instalate.

Instalarea lui Bundler necesită doar instalarea unei singure pietre prețioase

În timp ce unele pietre prețioase, cum ar fi Bundler, necesită instalarea unei singure pietre prețioase, alte pietre prețioase au dependențe care necesită instalarea mai multor pietre prețioase:

Instalarea Draper a necesitat, de asemenea, instalarea gemelor Request Store și Active Model Serializers

Pentru a vedea toate gemele instalate local, utilizați comanda, gem list .

Utilizarea gemelor

Acum, mai important, cum putem folosi gemele noastre instalate? Ei bine, depinde de tipul de gemă. Unele pietre prețioase, cum ar fi Rails, sunt programe Ruby de sine stătătoare pe care le puteți rula din comandă.

Altele sunt relativ inutile pe cont propriu, dar incredibil de utile atunci când sunt folosite în cadrul unui proiect. Pentru a utiliza o gemă din cadrul codului dumneavoastră, este necesar să o cereți mai întâi în partea de sus a fișierului – require 'gem_name' . De exemplu, Pry a devenit rapid una dintre bijuteriile mele preferate atunci când lucrez la proiecte. Codul meu i̶s̶s̶n̶’̶t̶ ̶a̶l̶w̶a̶y̶s̶ nu este aproape niciodată corect atunci când îl scriu pentru prima dată, iar Pry face ca depanarea să fie mult mai eficientă și un pic mai puțin dureroasă. Săptămâna trecută, am învățat despre API-uri și am avut nevoie de Pry și de alte câteva pietre prețioase pentru a finaliza proiectul.

În timp ce pietrele prețioase sunt foarte simple dacă aveți nevoie de ele doar pe computerul dumneavoastră, ele devin puțin mai complicate dacă doriți să vă distribuiți sau să vă publicați proiectul. Oricine altcineva care rulează proiectul dvs. va trebui să aibă toate gemele necesare și versiunile corecte instalate pe calculatorul său. Din fericire, avem RubyGems și Bundler care simplifică procesul.

RubyGems este cadrul care simplifică partajarea gemelor

O parte din magia gemelor este că le putem folosi cu toții, iar RubyGems este managerul de pachete care face posibil acest lucru. Acesta oferă un format standard pentru distribuirea gemelor Ruby, gestionează instalarea gemelor și un server pentru distribuirea acestora. RubyGems a fost lansat pentru public abia pe 14 martie 2004 (Ziua Pi! π) Deși RubyGems există încă din Ruby 1.8, nu a făcut parte din distribuția standard Ruby până la Ruby 1.9. Așadar, pentru începătorii în Ruby, ca mine, RubyGems este instalat automat pe computerul dumneavoastră atunci când instalați Ruby.

Cum au trăit vreodată rubiniștii fără RubyGems?

Viața era mult mai grea. Dacă doriți povestea completă, vă recomand să urmăriți prezentarea lui André Arko „How does Bundler work, anyway?” de la RailsConf 2015. Iată versiunea mea rezumată:

Încărcarea codului a început cu require , iar utilizarea lui require este, în esență, aceeași cu inserarea codului în fișierul dvs. În forma sa cea mai simplă, este o metodă care extrage codul din fișierul argument.

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

Require permite utilizatorilor să încarce orice cod local, căutând fișierul în $LOAD_PATH al utilizatorului. $LOAD_PATH este o variabilă globală și o matrice de căi absolute. Atâta timp cât directorul codului este localizat undeva în $LOAD_PATH, require îl va putea găsi.

În timp ce require este grozav pentru codul local, ce s-ar întâmpla dacă ați dori să obțineți cod de la altcineva? Era un proces anevoios – ar trebui să găsiți codul, să-l descărcați, să-l salvați undeva pe computer și să adăugați acel loc în $LOAD_PATH.

Ca urmare, setup.rb a evoluat pentru a ușura procesul. Setup.rb (care există și astăzi) este un program de instalare generic pentru scripturile și bibliotecile Ruby. A fost o îmbunătățire majoră față de require, deoarece copia toate fișierele Ruby într-un director care se afla deja în $LOAD_PATH. Dezvoltatorii sunt în mod inerent leneși, iar setup.rb ne-a salvat câțiva pași. Cu toate acestea, setup.rb a avut propriul set de probleme. Nu exista o urmărire a versiunilor și nici o modalitate de dezinstalare a unui program! Singura modalitate definitivă de a ști ce versiune aveai era să notezi numărul versiunii la instalare. După cum vă puteți imagina, utilizarea bibliotecilor era un mic dezastru.

În 2004, RubyGems a venit în ajutor! Acum codul altor persoane, sau gems, putea fi instalat sau dezinstalat cu o singură comandă! A fost revoluționar. RubyGems mai avea un alt șiretlic în mânecă – putea gestiona diferite versiuni de software, iar fiecare versiune era păstrată în propriul folder separat.

Bundler Solves Gem Dependencies

Oricât de incredibil părea RubyGems, acesta avea un defect inerent. Dacă doreați să partajați un proiect, cum vă asigurați că un nou utilizator avea toate gemele necesare?Cu configurația actuală a RubyGems, dacă un dezvoltator rula gem install foo și începea să folosească o nouă gemă în aplicație, celorlalți dezvoltatori din proiect trebuia să li se spună să ruleze gem install foo . Anumite pietre prețioase nu puteau funcționa decât cu anumite versiuni ale altor pietre prețioase și devenea din ce în ce mai dificil să se coordoneze dependențele dintre pietre prețioase și versiuni.

Alas, ajungem la Bundler! Bundler există pentru a rezolva problema dependenței versiunilor gemelor prin urmărirea și instalarea gemelor și versiunilor exacte de care este nevoie. Bundler funcționează prin intermediul unui „gemfile” al unei pietre prețioase Ruby, care îi spune lui Bundler ce pietre prețioase să caute și unde să le caute. https://rubygems.org este sursa implicită, dar dacă există pietre prețioase pe un server privat, această sursă poate fi suprascrisă pentru acele pietre prețioase specifice.

Exemplu de fișier de pietre prețioase – Sursa: http://bundler.io/rationale.html

După instalarea gemelor necesare (dacă computerul dumneavoastră nu le are deja), Bundler va scrie toate gemele și versiunile pe care le-a instalat într-un alt fișier, Gemfile.lock. Acest fișier de blocare face posibilă instalarea exact a acelorași versiuni pe fiecare mașină care rulează aplicația.

Utilizarea lui Bundler este simplă. În primul rând, este necesar să îl instalăm și, deoarece Bundler este el însuși o gemă, putem face acest lucru cu: gem install bundler . Cu Bundler instalat, puteți folosi orice gemă în propriul proiect în 2 pași:

  1. Adaugați gemul la un Gemfile din rădăcina proiectului
  2. Executați bundle install în terminal

Pentru mai multe detalii despre Bundler, consultați http://bundler.io/.

.

Lasă un răspuns

Adresa ta de email nu va fi publicată.