Utilitky pro Ruby: balíčkovací systém RubyGems

2. 7. 2007
Doba čtení: 4 minuty

Sdílet

Jak programovat v Ruby a v Ruby on Rails si můžete přečíst všude. Ruby má ale také spoustu pomocných utilitek, jako je třeba balíčkovací nebo buildovací systém, o kterých se moc nepíše. Přitom právě ony dělají vývoj mnohem snazší a příjemnější. A co vy — znáte je?

Co jsou to RubyGems?

RubyGems jsou balíčkovací systém pro Ruby. Díky RubyGems můžete snadno instalovat jak knihovny pro Ruby, tak další s Ruby spřízněný software, jako je například utilitka Rake, deployovací nástroj Capistrano, webový server Mongrel nebo framework Ruby on Rails. RubyGems jsou napsány v Ruby, jsou tedy multiplatformní a můžete si jejich schopností vychutnat jak pod Linuxem, tak ve Windows či u rubyistů tak populárním Mac OS X. Jedná se o dosti sofistikovaný apt-like balíčkovací systém, který vám umožní instalaci knihovny v určité verzi či rovnou několika různých verzích dle vašich požadavků. Že RubyGems podporují závislosti myslím ani není třeba říkat.

Již jen dodám, že kýžený balíček se jmenuje rubygems a vlastní program se pak volá gem. Pojďme si to nyní vyzkoušet prakticky!

Instalujeme software s RubyGems…

Pro zkušené linuxáky jistě nebude žádným překvapením, že pro instalaci software jsou třeba rootovská práva. Je tomu tak proto, že požadovaný software je instalován do složky /usr/lib/ruby/gems/<major_verze_ruby>, čili při dnešním Ruby 1.8.6 se použije složka /usr/lib/ruby/gems/1.8. Takto je tomu defaultně, nicméně není problém používat RubyGems pod neprivilegovaným uživatelem či jen instalovat software jinam (stačí nastavit proměnnou prostředí GEM_HOME). Ale dost již bylo řečí, jdeme na to:

gem install rails

Při zadání zmíněného příkazu dostanete na výběr různé verze Ruby on Rails, které jsou na serveru dostupné. Volbou verze a souhlasem s nainstalováním závislostí se vám nainstaluje balíček do systému.

Verzi můžeme rovnou specifikovat, a to pomocí gem install <balik>-<verze>. RubyGems jsou však opravdu sofistikovaný systém, a proto můžeme chtít například balíček verze 0.0.2 nebo vyšší, což provedeme pomocí:

gem install -r progressbar --version '> 0.0.2'

Vyhledávání

Vyhledávání se odvíjí od vypsání seznamu všech dostupných gemů pomocí gem query --remote či chcete-li zkráceně, pak gem q -R. Pustíte-li tento příkaz, uvidíte, že na nedostatek gemů si stěžovat opravdu nelze.

K nalezení konkrétního balíčku použijeme gem query --remote --name-matches <vyraz>. Použít můžete i regulární výrazy.

Informace o balíčku

Kompletní metadata balíčku lze vypsat příkazem gem specification <balicek>. O metadatech si povíme více v příštím dílu, kdy se budeme věnovat maintainerskému pohledu na RubyGems.

Upgrade

Jak jste viděli, inspirace debianím apt je jistě nepopiratelná. U upgrade bude však výjimka – na gem update && gem upgrade zapoměňte, upgrade zajišťuje pouhé gem update.

Nechceme-li upgradovat všechny balíčky, lze pomocí gem update <balik> aktualizovat pouze zvolený software či si můžete pomocí gem outdated nechat vypsat neaktuální balíčky.

Odebrání balíčku

K odebrání balíčku slouží gem uninstall. Máme-li v systému nainstalovaných verzí více, dostaneme na výběr, kterou verzi že si to přejeme odinstalovat. Závisí-li na balíčku nějaké závislosti, budeme na ně upozorněni.

Lokální balíčky

Příkaz gem query --local nebo též gem q -L vypíše lokálně instalované balíčky.

Že lokální či vzdálené balíčky lze odlišit volbami --local či --remote, vám jistě neuniklo. Užitečné je vědět, že pokud není žádná z těchto voleb uvedena, zkouší se zpravidla obě uvedené varianty, s tím, že přednost mají lokální akce.

Shrnutí příkazů aneb tahák to jistí

Činnost Příkaz
Instalace gem install <balicek>
Vyhledávání gem q -R <vyraz>
Odinstalování gem uninstall <balicek>
Vypsání metadat gem specification <balicek>
Aktualizace balíčků gem update

Konfigurační soubor

Na mnohé volby se vyplatí mít aliasy, s tím si ale už jistě poradíte sami. Zajímavější je, že i RubyGems mají svůj vlastní konfigurační soubor. Jmenuje se logicky ~/.gemrc a jedná se o klasický YAML.

Pokud například chcete, aby se některé akce spouštěly vždy, lze to specifikovat ve volbě gem takto:

gem: --gen-rdoc --run-tests

Výše uvedeným zápisem dosáhneme toho, že při každé instalaci automaticky necháme proběhnout jednotkové testy a vygenerujeme dokumentaci pomocí RDoc.

Tolik namátkou, dále zde mohou být například parametry RDoc nebo určení GEMPATH, pro podrobnosti vizte manuál.

bitcoin_skoleni

Příště

Dnešní část byla uživatelská, příští tedy bude programátorská a maintainerská. Řekneme si jak o psaní programů s využitím knihoven dostupných z lokálního RubyGems repozitáře, tak také něco více o formátu gemovských balíčků a naučíme se dělat vlastní balíčky.

Máte-li návrhy na další verze seriálu, budou jedině vítány. Zatím je naplánován buildovací systém Rake, řeč přijde také na dokumentační utilitky ri a RDoc, utilitky pro distribuci Tar2RubyScript, AllInOneRuby a možná RubyScript2exe. Také uvažuji říci pár slov o webovém serveru Mongrel. Máte-li nějaká přání, pište do diskuse. Bude-li to v mých silách, rád o požadované problematice napíši.

Odkazy

Autor článku

Jakub Šťastný byl v letech 2007 až 2008 redaktorem serveru Root.cz. Mezi jeho zájmy patří Linux, programování a typografický systém TeX.