Mi az a rubin drágakő?

Amikor először hallottam a rubin drágakövekről, nagyon varázslatosnak tűntek. A bundle install futtatásával valahogy megszerezhettem ezeket a mágikus drágaköveket, amelyek mindenféle olyan dolgokra késztették a kódomat, amelyek messze meghaladni látszottak az 1. heti Flatiron-tanulói képességeimet. A Mario Kart “tárgydobozaihoz” hasonlóan úgy tűnik, hogy a drágakövek szuperképességeket adnak a felhasználónak.

Ruby Gems give you magic powers!

A blogom segítségével mélyebben el akarok mélyedni a kíváncsiságomat felkeltő és általam nem teljesen értett programozási fogalmakban. Első blogbejegyzésemben a Ruby gemek misztikus, mágikus természetét fogom leleplezni.

Mi az a Ruby Gem?

Nem, a Ruby gemek nem mágikusak. Ezek egyszerűen nyílt forráskódú könyvtárak, amelyek Ruby kódot tartalmaznak, és egy kis extra adattal vannak becsomagolva . Egy gem használata lehetővé teszi a programozó számára, hogy a gemben található kódot használja a saját programjában, anélkül, hogy kifejezetten be kellene illesztenie a kódot.

A gemeket mindenféle célra lehet használni, és a különböző gemeket a https://rubygems.org/ oldalon lehet felfedezni. Hogy jobban lássuk, mire képesek a gemek, íme néhány népszerű gem és azok funkciói:

  • Bundler – Egységes környezetet biztosít a Ruby projektek számára azáltal, hogy pontosan a szükséges gemeket és verziókat követi és telepíti. Ez minden idők első számú letöltött gemje, de a Bundlerről később bővebben.
  • RSpec – Egy tesztelési keretrendszer, amely támogatja a viselkedésvezérelt fejlesztést Ruby számára.
  • Devise – A Devise a hitelesítéssel dolgozik. Minden olyan weboldal számára, ahol felhasználói bejelentkezésre van szükség, a Devise kezeli a bejelentkezést, regisztrációt, jelszó visszaállítását, stb.
  • JSON – API-t biztosít JSON szövegből történő elemzésére.
  • Nokogiri – HTML, XML, SAX és Reader elemzőket biztosít XPath és CSS szelektor támogatással.
  • Rails – A Rails egy gyöngyszem! A Rails olyan fullstack keretrendszert biztosít, amely lehetővé teszi a Ruby webes alkalmazásokká alakítását.

A gemek telepítése

Most a gemek használata egyszerű! A gems helyi telepítése olyan egyszerű, mint egyetlen parancs: gem install . Az install parancs elhozza a kódot, letölti a számítógépre, és telepíti a gem-et és a szükséges függőségeket. Végül a telepített gems dokumentációját is elkészíti.

A bundler telepítéséhez csak 1 gem telepítése szükséges

Míg egyes gemek, például a Bundler, csak 1 gem telepítését igénylik, más gemek függőségei több gem telepítését igénylik:

A Draper telepítéséhez a Request Store és az Active Model Serializers gems telepítése is szükséges

Az összes helyileg telepített gems megtekintéséhez használja a gem list parancsot.

A gemek használata

Most, ami még fontosabb, hogyan használhatjuk a telepített gemeket? Nos, ez a drágakő típusától függ. Egyes gemek, mint például a Rails, önálló Ruby programok, amelyeket parancsból futtathatunk.

Mások önmagukban viszonylag haszontalanok, de hihetetlenül hasznosak, ha egy projekten belül használjuk őket. Ahhoz, hogy egy gemet a kódodon belülről használhass, először a fájl tetején kell megkövetelni – require 'gem_name' . Például a Pry gyorsan az egyik kedvenc drágakövemmé vált, amikor projekteken dolgozom. A kódom i̶s̶n̶’̶t̶ ̶a̶l̶w̶a̶y̶s̶ szinte soha nem helyes, amikor először írom, és a Pry sokkal hatékonyabbá és kevésbé fájdalmasabbá teszi a hibakeresést. Az elmúlt héten az API-król tanultunk, és a projekt befejezéséhez szükségünk volt a Pry-ra és néhány más gemre.

Míg a gemek nagyon egyszerűek, ha csak a számítógépeden van rájuk szükséged, kissé bonyolultabbá válnak, ha terjeszteni vagy publikálni akarod a projektedet. Bárki másnak, aki a projektedet futtatja, rendelkeznie kell a szükséges gemekkel és a megfelelő verziókkal a számítógépén. Szerencsére itt van a RubyGems és a Bundler, amelyek egyszerűsítik a folyamatot.

A RubyGems a keretrendszer, amely leegyszerűsíti a gemek megosztását

A gemek varázsának része, hogy mindannyian használhatjuk őket, és a RubyGems a csomagkezelő, amely ezt lehetővé teszi. Egy szabványos formátumot biztosít a Ruby gemek terjesztéséhez, kezeli a gemek telepítését, és egy szervert a terjesztésükhöz. A RubyGems csak 2004. március 14-én (Pi napja! π) jelent meg a nyilvánosság számára. Bár a RubyGems már a Ruby 1.8 óta létezik, a Ruby 1.9-ig nem volt része a szabványos Ruby disztribúciónak. Tehát a Ruby-újoncok számára, mint például nekem, a RubyGems automatikusan települ a számítógépedre, amikor telepíted a Ruby-t.

Hogyan éltek a Rubyisták valaha RubyGems nélkül?

Az élet sokkal nehezebb volt. Ha kíváncsi vagy a teljes történetre, ajánlom figyelmedbe André Arko “How does Bundler work, anyway?” című előadását a RailsConf 2015-ről. Íme az én összefoglaló verzióm:

A kód betöltése a require segítségével kezdődött, és a require használata lényegében ugyanaz, mint a kód beszúrása a fájlodba. A legegyszerűbb formájában ez egy olyan módszer, amely kódot von ki az argumentumfájlból.

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

Require lehetővé teszi a felhasználók számára bármilyen helyi kód betöltését, a felhasználó $LOAD_PATH fájljának megkeresésével. A $LOAD_PATH egy globális változó és egy abszolút elérési utakból álló tömb. Amíg a kód könyvtára valahol a $LOAD_PATH-on belül található, a require képes megtalálni azt.

Míg a require nagyszerű a helyi kódhoz, mi van akkor, ha valaki mástól szeretnénk kódot szerezni? Ez egy fárasztó folyamat volt – meg kellett keresned a kódot, le kellett töltened, el kellett mentened valahova a számítógépeden, és azt hozzáadni valahol a $LOAD_PATH-hoz.

Ezért a setup.rb úgy fejlődött, hogy megkönnyítse a folyamatot. A Setup.rb (amely még ma is létezik) egy általános telepítőprogram a Ruby szkriptekhez és könyvtárakhoz. Jelentős előrelépés volt a require-hez képest, mivel az összes Ruby-fájlt egy olyan könyvtárba másolta, amely már a $LOAD_PATH-ban volt. A fejlesztők eleve lusták, és a setup.rb megspórolt nekünk néhány lépést. A setup.rb-nek azonban megvoltak a maga problémái. Nem volt verziókövetés, és nem volt mód a program eltávolítására! Az egyetlen biztos módja annak, hogy megtudjuk, milyen verzióval rendelkezünk, az volt, hogy a telepítéskor felírtuk a verziószámot. Elképzelheti, hogy a könyvtárak használata kissé katasztrofális volt.

2004-ben a RubyGems jött a segítségünkre! Most már mások kódjait, vagy gem-eket egyetlen paranccsal lehetett telepíteni vagy eltávolítani! Ez forradalmi volt. A RubyGemsnek volt még egy trükk a tarsolyában – képes volt kezelni a szoftverek különböző verzióit, és minden verziót külön mappában tartott.

Bundler Solves Gem Dependencies

Amilyen hihetetlennek tűnt a RubyGems, volt egy velejáró hibája. Ha meg akartál osztani egy projektet, hogyan tudtad biztosítani, hogy egy új felhasználó rendelkezzen az összes szükséges gemmel?A RubyGems jelenlegi beállításával, ha egy fejlesztő lefuttatta a gem install foo -t és elkezdett használni egy új gemet az alkalmazásban, a projekt többi fejlesztőjének is szólni kellett, hogy futtassák a gem install foo -t . Bizonyos gemek csak más gemek bizonyos verzióival működhettek, és egyre nehezebbé vált a gem- és verziófüggőségek koordinálása.

Elérkeztünk a Bundlerhez! A Bundler azért létezik, hogy megoldja a gem-verziófüggőség problémáját azáltal, hogy pontosan a szükséges gem-eket és verziókat követi és telepíti. A Bundler a Ruby gem “gemfile”-ján keresztül működik, amely megmondja a Bundlernek, hogy milyen gemeket keressen és hol keresse őket. https://rubygems.org az alapértelmezett forrás, de ha gemek léteznek egy privát szerveren, akkor ez a forrás felülírható az adott gemek számára.

Példa Gemfile – Forrás: http://bundler.io/rationale.html

A szükséges gemek telepítése után (ha a számítógépen még nincsenek) a Bundler az összes telepített gemet és verziót egy másik fájlba, a Gemfile.lock fájlba írja. Ez a lock fájl lehetővé teszi, hogy pontosan ugyanazokat a verziókat telepítse minden olyan gépre, amelyen az alkalmazás fut.

A Bundler használata egyszerű. Először is telepíteni kell, és mivel a Bundler maga is egy gem, ezt megtehetjük a: gem install bundler . A Bundler telepítésével bármilyen gemet használhatunk a saját projektünkben 2 lépésben:

  1. Adjuk hozzá a gemet a projektünk gyökerében lévő Gemfile-hoz
  2. Futtassuk a bundle install a terminálban

A Bundler további sajátosságaiért nézzük meg a http://bundler.io/.

Vélemény, hozzászólás?

Az e-mail-címet nem tesszük közzé.