Pár hete használom a ruby gemeket, és ez nagyszerű, de nem voltam biztos benne, hogy mi történik a motorháztető alatt, amikor hozzáadtam egyet az alkalmazásomhoz. Ezért ez a blogbejegyzés segít megérteni, hogyan működnek a gemek, és remélhetőleg neked is segít.
A ruby gem egy becsomagolt ruby kód, amit hozzáadhatsz az alkalmazásodhoz. Ezzel időt takaríthatsz meg azzal, hogy olyan kódot használsz, amelyet mások írtak hasonló problémák megoldására. Ha például meg akarod változtatni valamilyen szöveg színét, telepítheted és használhatod a colorize gem-et. Megkapod az összes funkcióját anélkül, hogy magadnak kellene megírnod ezt a kódot.
Sinatra egy gem, Rack egy gem, és meglepődve tapasztaltam, hogy még a Rails is egy gem. Minden nyilvános gemet a RubyGems.org-on keresztül tesznek közzé. Itt az emberek hozzájárulhatnak és megoszthatják őket a közösséggel.
Kezdjük egy gem telepítésével
Válasszunk egy gemet és telepítsük. Én a colorize gem-et választottam az alkalmazásomhoz, amely megváltoztatja az általunk átadott karakterlánc színét. A gem install gem_név futtatásával letölthetjük a gemet a számítógépünkre, és elérhetővé tehetjük az alkalmazásaink számára. Kíváncsi vagy, hol lakik a gem a telepítés után? Futtathatjuk a gem which gem_név futtatást, és pontosan megmondja, hogy hol van.
A gem használatához a kódunkban szükségünk lesz a gem-re a fájlunk elején a require ‘gem_név’ beírásával. Ezt azért tesszük, hogy hozzáférjünk a gemhez, és mostantól nem kell saját kódot írnunk a szöveg színezéséhez.
Most, hogy a gem telepítve és szükséges, használhatjuk. Általában, ha felkeresed a gem GitHub repóját, fontos információkat találsz a funkcióiról és azok használatáról.
Használjuk!
Elolvastuk a readme-t, és most szeretnénk színt adni a szövegünknek. A kódomban három különböző színt adtam hozzá, egy karakterlánc .colorze(:color) meghívásával.
Klassz! Ugye milyen jól néz ki? Tehát telepítettük a gemünket, és úgy tűnik, hogy működik, de mi van akkor, ha van egy nagyobb alkalmazásunk, ami sok gemet igényel? A gem install meghívása és minden egyes gem igénylése sok munkának tűnik. Biztosan van egy egyszerűbb megoldás.
Bundler
A Bundler nagyban megkönnyíti az életünket. Mi az a bundler? Hát persze, hogy egy drágakő! Nyomon követi az egyes gemeket, és pontosan azt a gemet és verziót telepíti, amire szükséged van az alkalmazásodban. A bundler használatához szükséged lesz egy Gemfile-ra a projekted könyvtárában, és benne annyi gem-et listázhatsz, amennyit csak szeretnél. Ehhez csak nyisd meg a Gemfile-t, és add hozzá a gem ‘gem_név’.
Mihelyt hozzáadtad a Gemfile-hoz, mindenképpen futtasd a bundle install-t a terminálodban. Ez telepíti a Gemfile-odban felsorolt összes drágakövet a függőségeikkel együtt. Ez minden bizonnyal sokkal könnyebbé teszi a dolgokat. Ami nagyszerű, hogy a Ruby 2.6 és újabb verziók automatikusan tartalmazzák a bundler-t, így nem kell magad telepítened.
Úgy tűnik, hogy még mindig hozzá kell adnunk a require ‘gem_file’ szót a fájljaink tetején, és ez is sok munkának tűnik, ha sok ilyen fájlunk van. Kiderült, hogy a bundler erre is gondolt. A require ‘bundler’-t hozzáadhatod a .rb fájlod elejére, és írhatod, hogy Bunlder.require(:default). Ez a motorháztető alatt annyit tesz, hogy meghívja a require ‘gem_név’-t minden egyes gemhez, ami a gemfile-ban van.
Amint lefuttatod a bundle install-t, észreveheted, hogy sok olyan gem települ, amit nem adtál hozzá. Miért van ez? Sok drágakő megköveteli, hogy más drágaköveket is telepítsenek velük együtt. Például a rails sok más drágakövet igényel, és ezek a drágakövek is igényelhetnek más drágaköveket, és így tovább. A Bundler gondoskodik arról, hogy az összes telepített gem verziója kompatibilis legyen egymással.
Miután megtalálja az egyes gemek megfelelő verzióit, ezeket a verziókat egy másik, Gemfile.lock nevű fájlba rögzíti. Ez lehetővé teszi, hogy pontosan ugyanazt a verziót telepítse minden olyan gépre, amelyen ezt az alkalmazást futtatni kell.
A Gemfile.lock fájlomban látható, hogy a lolize-nek szüksége van a paint gem-re és az általa használható verziókra. Tehát a bundler ezt és a megfelelő verziót fogja megragadni számunkra. Hát nem hasznos ez? Köszi bundler!
Szóval ennyi! Remélem, ez segített megérteni a gem és a bundler alapjait. Sok gem van odakint, amit használhatsz, és itt keresheted őket. https://rubygems.org/.