Hlavní navigace

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.

Root tip

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.