Co je to rubínový drahokam?

Když jsem se poprvé dozvěděl o rubínových drahokamech, připadaly mi docela kouzelné. Spuštěním bundle install jsem mohl nějakým způsobem získat tyto kouzelné drahokamy, které by můj kód přiměly dělat nejrůznější věci, které se zdály být daleko za hranicemi mých schopností studenta prvního týdne Flatironu. Podobně jako „krabice s předměty“ ve hře Mario Kart se zdálo, že drahokamy propůjčují uživateli superschopnosti.

Drahokamy Ruby vám dávají kouzelné schopnosti!“

Svůj blog hodlám používat k tomu, abych se hlouběji ponořil do programátorských konceptů, které vzbuzují mou zvědavost a kterým plně nerozumím. Ve svém prvním příspěvku na blogu se chystám vyvrátit mystickou, magickou povahu drahokamů Ruby.

Co je to drahokam Ruby?

Ne, drahokamy Ruby nejsou magické. Jsou to prostě knihovny s otevřeným zdrojovým kódem, které obsahují kód jazyka Ruby a jsou zabaleny s trochou dat navíc . Použití gemu umožňuje programátorovi použít kód obsažený v gemu ve svém vlastním programu, aniž by tento kód musel explicitně vkládat.

Gemy lze použít k nejrůznějším účelům a různé gemy si můžete prohlédnout na adrese https://rubygems.org/. Pro lepší představu o tom, co všechno gemy umí, uvádíme několik populárních gemů a jejich funkcí:

  • Bundler – Zajišťuje konzistentní prostředí pro projekty Ruby tím, že sleduje a instaluje přesně ty gemy a jejich verze, které jsou potřeba. Je to nejstahovanější gem všech dob, ale o Bundleru si povíme více později.
  • RSpec – Testovací framework, který podporuje Behavior Driven Development pro Ruby.
  • Devise – Devise pracuje s ověřováním. Pro všechny webové stránky, které potřebují přihlášení uživatelů, Devise zvládá přihlášení, registraci, reset hesla atd.
  • JSON – Poskytuje API pro parsování JSON z textu.
  • Nokogiri – Poskytuje parsery HTML, XML, SAX a Reader s podporou XPath a CSS selektorů.
  • Rails – Rails je klenot! Rails poskytuje fullstack framework, který umožňuje transformovat jazyk Ruby do webových aplikací.

Instalace gemů

Dnes je používání gemů snadné! Lokální instalace gemů je jednoduchá jako jediný příkaz: gem install . Příkaz install načte kód, stáhne jej do počítače a nainstaluje gem a všechny potřebné závislosti. Nakonec sestaví dokumentaci k nainstalovaným gemům.

Instalace bundleru vyžaduje instalaci pouze 1 gemu

Zatímco některé gemy, například Bundler, vyžadují instalaci pouze 1 gemu, jiné gemy mají závislosti, které vyžadují instalaci více gemů:

Instalace Draperu vyžadovala také instalaci gemů Request Store a Active Model Serializers

Pro zobrazení všech lokálně nainstalovaných gemů použijte příkaz, gem list .

Použití drahokamů

Nyní je důležitější, jak můžeme nainstalované drahokamy používat? No, to záleží na typu drahokamu. Některé gemy, jako například Rails, jsou samostatné programy v jazyce Ruby, které můžete spustit z příkazu.

Jiné jsou samy o sobě relativně nepoužitelné, ale neuvěřitelně užitečné při použití v rámci projektu. Chcete-li gem použít ze svého kódu, je nutné jej nejprve vyžadovat v horní části souboru – require 'gem_name' . Například Pry se rychle stal jedním z mých oblíbených gemů při práci na projektech. Můj kód i̶s̶n̶’̶t̶ ̶a̶l̶w̶a̶y̶s̶ není téměř nikdy správný, když ho píšu poprvé, a díky Pry je ladění mnohem efektivnější a o něco méně bolestivé. V uplynulém týdnu jsme se učili o API a k dokončení projektu jsme potřebovali Pry a několik dalších drahokamů.

Pokud jsou drahokamy velmi jednoduché, pokud je potřebujete pouze ve svém počítači, stávají se o něco složitějšími, pokud chcete svůj projekt distribuovat nebo publikovat. Kdokoli jiný, kdo váš projekt spustí, bude muset mít na svém počítači nainstalovány všechny potřebné drahokamy a jejich správné verze. Naštěstí máme RubyGems a Bundler, které tento proces zjednodušují.

RubyGems je framework, který zjednodušuje sdílení gemů

Část kouzla gemů spočívá v tom, že je můžeme používat všichni, a RubyGems je správce balíčků, který to umožňuje. Poskytuje standardní formát pro distribuci gemů Ruby, spravuje instalaci gemů a server pro jejich distribuci. RubyGems byl uvolněn pro veřejnost až 14. března 2004 (Den Pí! π) Ačkoli RubyGems existuje již od verze Ruby 1.8, součástí standardní distribuce Ruby se stal až ve verzi Ruby 1.9. RubyGems je také součástí standardní distribuce Ruby. Takže pro nováčky v Ruby, jako jsem já, se RubyGems automaticky nainstaluje na váš počítač při instalaci Ruby.

Jak mohli Rubyisté kdy žít bez RubyGems?

Život byl mnohem těžší. Pokud chcete znát celý příběh, vřele doporučuji shlédnout prezentaci Andrého Arka „How does Bundler work, anyway?“ z konference RailsConf 2015. Zde je moje shrnutá verze:

Kódování načítání začalo pomocí require , a použití require je v podstatě stejné jako vložení kódu do souboru. V nejjednodušší podobě se jedná o metodu, která extrahuje kód z argumentového souboru.

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

Require umožňuje uživatelům načíst libovolný lokální kód tak, že vyhledá soubor v uživatelově $LOAD_PATH. $LOAD_PATH je globální proměnná a pole absolutních cest. Pokud se adresář kódu nachází někde uvnitř $LOAD_PATH, require jej dokáže najít.

Pokud je require skvělá pro lokální kód, co když chcete získat kód od někoho jiného? Byl to zdlouhavý proces – museli byste kód najít, stáhnout, uložit ho někam do počítače a přidat ho někam do $LOAD_PATH.

V důsledku toho se soubor setup.rb vyvinul tak, aby tento proces usnadnil. Setup.rb (který existuje dodnes) je obecný instalátor skriptů a knihoven Ruby. Byl významným vylepšením oproti require, protože kopíroval všechny soubory Ruby do adresáře, který již byl v $LOAD_PATH. Vývojáři jsou ze své podstaty líní a setup.rb nám ušetřil několik kroků. Setup.rb však měl své vlastní problémy. Neexistovalo žádné sledování verzí a žádný způsob odinstalace programu! Jediný definitivní způsob, jak zjistit, jakou verzi máte, bylo zapsat číslo verze při instalaci. Jak si dokážete představit, používání knihoven bylo tak trochu katastrofou.

V roce 2004 přišly na pomoc RubyGems! Nyní bylo možné cizí kód neboli gemy nainstalovat nebo odinstalovat jediným příkazem! Bylo to revoluční. RubyGems měl v rukávu ještě jeden trik – dokázal si poradit s různými verzemi softwaru a každá verze byla uložena v samostatné složce.

Bundler řeší závislosti gemů

Jakkoli se RubyGems zdál neuvěřitelný, měl jednu neodstranitelnou chybu. Pokud jste chtěli sdílet projekt, jak jste zajistili, aby nový uživatel měl všechny potřebné gemy?Při současném nastavení RubyGems, pokud vývojář spustil gem install foo a začal v aplikaci používat nový gem, bylo třeba ostatním vývojářům v projektu říci, aby spustili gem install foo . Některé gemy mohly fungovat pouze s určitými verzemi jiných gemů a bylo stále obtížnější koordinovat závislosti gemů a verzí.

Bohužel, přicházíme k Bundleru! Bundler existuje proto, aby vyřešil problém závislostí gemů na verzích tím, že sleduje a instaluje přesně ty gemy a verze, které jsou potřeba. Bundler pracuje prostřednictvím „souboru gemů“ jazyka Ruby, který Bundleru říká, které gemy má hledat a kde je má hledat. https://rubygems.org Je to výchozí zdroj, ale pokud existují gemy na soukromém serveru, lze tento zdroj pro tyto konkrétní gemy přepsat.

Příklad Gemfile – Zdroj: http://bundler.io/rationale.html

Po instalaci požadovaných drahokamů (pokud je váš počítač ještě nemá) zapíše Bundler všechny nainstalované drahokamy a jejich verze do dalšího souboru Gemfile.lock. Tento soubor zámku umožňuje nainstalovat přesně stejné verze na každý počítač, na kterém je aplikace spuštěna.

Používání nástroje Bundler je jednoduché. Nejprve je nutné jej nainstalovat, a protože Bundler je sám o sobě gem, můžeme tak učinit pomocí: gem install bundler . S nainstalovaným Bundlerem můžete použít libovolný gem ve vlastním projektu ve dvou krocích:

  1. Přidejte gem do souboru Gemfile v kořenovém adresáři projektu
  2. Spusťte bundle install v terminálu

Další podrobnosti o Bundleru najdete v http://bundler.io/.

.

Napsat komentář

Vaše e-mailová adresa nebude zveřejněna.