Utilitky pro Ruby: buildovací systém Rake I

Jakub Šťastný 3. 9. 2007

Protože programátoři jsou verbež líná a pracují jen když už vyzkoušeli všechny ostatní alternativy, vymysleli si buildovací systémy, aby jim ulehčovali již tak dost lehkou práci. Pro Ruby existuje buildovací systém Rake, s kterým se dnes naučíme pracovat.

Poznámka: Článek byl inspirován dokonalým úvodem do Rake na RailsEnvy.com, opravdu všem doporučuji si jej přečíst.

Stručný úvod aneb k čemu je takový buildovací systém dobrý

Kdo z linuxáků by neznal klasický unixový Make, nástroj věrně nás doprovázející při téměř každé kompilaci? Před vynálezem této geniální utilitky byly jen shellové skripty, samozřejmě každý programátor si je dělal podle sebe, nebyla žádná norma ani nástroj, který by pomohl dělat tuto práci efektivněji. Pak však přišel Stuart Feldman z legendárních Bell Labs a vynalezl Make, který mimochodem tento rok slaví své již třicáté výročí.

Vynález Make byl do značné míry revoluční, přinesl jak standardizaci v unixové instalaci, tak především spoustu skvělých vychytávek. Jedny z jeho největších výhod byly rozdílové kompilace a systém vzájemných závislostí zdrojových souborů. Rozdílová kompilace spočívá v tom, že jsou kompilovány pouze zdrojové soubory, které se změnily. To samozřejmě rapidně urychlilo kompilaci, což se v té době vyvažovalo zlatem.

Později přišly další buildovací systémy, známý je například s Javou spřízněný Ant a mnohé další. Například Rake.

Samozřejmě není problém používat klidně klasické Make pro vývoj programů v Ruby, ale Rake se vyplatí víc. Proč? Make je dokonalé na vývoj programů v kompilovaných jazycích, Rake má jiné výhody – především tu, že sám je napsán v Ruby a obsahuje knihovny určené na ulehčení práce s konkrétními typy úkolů. A v neposlední řadě – ve světě Ruby je to (nepsaný) standard.

Skriptovací jazyky přinášejí méně problémů, zdrojový kód není třeba kompilovat, proč tedy vlastně potřebujeme buildovací systém? Pomocí Rake můžeme například:

  • vytvořit gem balíček
  • vyčistit cache
  • migrovat databázi
  • udělat cokoliv, co vás napadne

Že je to desetkrát přehlednější, než mít padesát skriptů asi není třeba říkat, závislosti jsou taktéž k nezaplacení a kdybyste náhodou chtěli něco kompilovat, Rake si s kompilací pouze změněných souborů poradí stejně dobře jako Make.

Jak vypadá Rakefile?

Zpravidla jsou ukazovány příklady z Ruby on Rails, my se proto zkusíme podívat, jak nám může Rake posloužit při tvorbě dokumentu v ConTeXtu:

task :default do
  sh("texexec document")
end

Nic složitého, jednoduše jsme vytvořili úkol default a jako blok mu předali kód, který se má vykonat. Metoda sh je určena pro vykonávání shellového kódu.

task :clean do
  sh("rm *.tuo *.tui *.mp *.log")
end

Námi vytvořený úkol default je volán implicitně, chceme-li volat jiný úkol, je třeba jej volat pomocí rake [taskname], čili v našem případě budeme volat rake clean. Ostatně nic nového pod sluncem, stejně tak je tomu v Make.

Dejme tomu, že někdy si přejeme dočasné TeXové soubory mazat rovnou, ale jindy zase ne. Uděláme proto další task a hned si na něm ukážeme závislostí jednotlivých úkolů:

task :proceed => :default do
  sh("rm *.tuo *.tui *.mp *.log")
end

Když nyní spustíme rake proceed, Rake se koukne na task proceed a zjistí, že je závislý na tasku default. Vykoná tedy task default a vrátí se zpět na task proceed. Ten nyní již bez problémů vykoná. V důsledku tedy nejdřív zkompilujeme zdrojový kód a teprve potom (pochopitelně) smažeme dočasné soubory.

Výborně, ale co když budeme chtít naše úkoly vypsat? Je to jednoduché, pustíme rake s volbou --tasks, která vypíše jednotlivé volby včetně jejich významu – na to je ale třeba je nejdříve popsat:

desc "Typeset the document."
task :default do
  sh("texexec document")
end

desc "Remove all temporary files."
task :clean do
  sh("rm *.tuo *.tui *.mp *.log")
end

desc "Typeset the document and remove temporary files."
task :proceed => :default do
  sh("rm *.tuo *.tui *.mp *.log")
end

Dostaneme tento výstup:

MacBoocek:~/Desktop botanicus $ rake --tasks
(in /Users/botanicus/Desktop)
rake clean    # Remove all temporary files.
rake default  # Typeset the document.
rake proceed  # Typeset the document and remove temporary files.

Upozorňuji, že nepopsané tasky nejsou touto volbou zobrazeny, takže popisovat se je určitě vyplatí.

Namespace

V rámci jednoho Rakefile je možné mít různé namespace:

namespace :backup do
  task :full do
    # block
  end
  task :incrementary do
    # block
  end
end

Jak prosté. Stejně prosté je pak jejich volání z příkazové řádky:

rake backup:full

A co se bude probírat příště?

A to je vše přátelé, úvod do Rake máme za sebou. Protože samozřejmě jen úvod sám o sobě je málo, Rake zůstane tématem našeho seriálu ještě přinejmenším příště a popříště, tentokrát však již nasadíme laťku výše …

Odkazy

Ohodnoťte jako ve škole:

Průměrná známka 2,79

Našli jste v článku chybu?
Zasílat nově přidané příspěvky e-mailem
Lupa.cz: Vlhký sen vnitra se splnil: vznikl státní podnik pro IT

Vlhký sen vnitra se splnil: vznikl státní podnik pro IT

Vitalia.cz: Pozor na potraviny s atropinem

Pozor na potraviny s atropinem

Vitalia.cz: Pro otrlé: 42 obrázků, které budou na cigaretách

Pro otrlé: 42 obrázků, které budou na cigaretách

Podnikatel.cz: Daň z příjmů: online formulář

Daň z příjmů: online formulář

Root.cz: Netflix nemá vlastní servery, běží z Amazonu

Netflix nemá vlastní servery, běží z Amazonu

Podnikatel.cz: Registr všech účtů. Konec daňovým únikům?

Registr všech účtů. Konec daňovým únikům?

Lupa.cz: Lepší než Google: proč používat DuckDuckGo?

Lepší než Google: proč používat DuckDuckGo?

Lupa.cz: Stream koupil Červeného trpaslíka a další seriály

Stream koupil Červeného trpaslíka a další seriály

Lupa.cz: Miliony mladých lidí utíkají z Facebooku. Kam?

Miliony mladých lidí utíkají z Facebooku. Kam?

Měšec.cz: Katalogoví šmejdi. Oberou vás o 30 tisíc a legálně.

Katalogoví šmejdi. Oberou vás o 30 tisíc a legálně.

Lupa.cz: Pokud chcete být špičkový programátor…

Pokud chcete být špičkový programátor…

Vitalia.cz: Proč si černý kašel cestu zpátky našel

Proč si černý kašel cestu zpátky našel

Lupa.cz: Osmý plán na stavbu rychlých sítí je nedodělek

Osmý plán na stavbu rychlých sítí je nedodělek

DigiZone.cz: Kdy bude Netflix na „českých“ televizorech?

Kdy bude Netflix na „českých“ televizorech?

120na80.cz: 10 nejprodáva­nějších homeopatik

10 nejprodáva­nějších homeopatik

Lupa.cz: Většině vašich přátel z Facebooku jste ukradení

Většině vašich přátel z Facebooku jste ukradení

Lupa.cz: Jak hackovat banky? Útočníci mají nový trik

Jak hackovat banky? Útočníci mají nový trik

Podnikatel.cz: Není jim to, tak to vrátí. Víme, jak na ně

Není jim to, tak to vrátí. Víme, jak na ně

Vitalia.cz: Kouzlo generik: Jak se liší Paralen a Paralen Grip?

Kouzlo generik: Jak se liší Paralen a Paralen Grip?

Vitalia.cz: Čínská medicína: Citron při chřipce ne

Čínská medicína: Citron při chřipce ne

Ušetřete