Hlavní navigace

Utilitky pro Ruby: buildovací systém Rake VI

Jakub Šťastný

V posledním díle seriálu o utilitkách pro Ruby věnovaném systému Rake se budeme zabývat využití Rake ve webovém frameworku Ruby on Rails. Nakonec si vezmene křišťálovou kouli a podíváme se do budoucnosti, jinými slovy podíváme se na chystané novinky v Rake.

Rake v Ruby on Rails

Rake má významnou roli při vývoji aplikací v Ruby on Rails, ostatně věřím, že rake db:migrate jste spouštěli tolikrát, že vás toto tvrzení ani na okamžik nemůže překvapit.

Od doby, co disponuje Rake možností definování různých namespace, jich Rails důsledně využívají, čímž se velké množství tasků stává logické a přehledné. Základní namespace jsou db, doc, log, rails, test a tmp.

Tasky v namespace db logicky poskytují operace pro práci s databází. Sem patří onen profláklý task db:migrate, který, pokud to náhodou ještě někdo neví, slouží k migrování databáze ze souborů v db/migrate. Defaultně se migruje na nejvyšší dostupnou verzi, a pokud si přejete, aby se migrovalo na některou konkrétní, specifikujte ji parametrem VERSION=X, který uvedete za db:migrate. Dejme tomu, že mám tyto migrace:

blog> ls db/migrate/
001_create_articles.rb  005_add_articles.rb     009_create_authors.rb
002_create_posts.rb     006_create_news.rb      010_add_authors.rb
003_create_tags.rb      007_add_news.rb         011_create_projects.rb
004_add_tags.rb         008_add_posts.rb        012_add_projects.rb

Příkazem rake db:migrate VERSION=5 migrujeme soubory 001_create_ar­ticles.rb, 002_create_pos­ts.rb, 003_create_tags.rb, 004_add_tags.rb a 005_add_articles­.rb, jinými slovy číslo migrace odpovídá tomu, čemu Rails říkají verze.

V namespace doc nalezneme task app, který do doc/app vygeneruje RDoc dokumentaci k aplikaci, task reapp, který ji přegeneruje a task clobber_app, který ji odstraní. Podobně funguje plugins a clobber_plugins, které generují, resp. mažou dokumentaci ke všem nainstalovaným pluginům.

Tasky v namespace test poskytují rozhraní pro testování aplikace. Nejrozsáhlejší testování provádí rake test, který spustí všechny jednotkové a funkcionální testy (samozřejmě není z namespace test, ale je logické jej zmínit právě na tomto místě). Pouze jednotkové testy lze spustit příkazem rake test:units, testy z test/functional příkazem rake test:functionals a testy z test/integration příkazem rake test:integration. Všechny pluginy se otestují pomocí rake test:plugins, když specifikujete PLUGIN=X, bude testován pouze vámi požadovaný plugin.

Tasky obsažené v namespace tmp jsou určeny zpravidla na čištění dočasných souborů: tmp:cache:clear maže vše v tmp/cache, tmp:pids:clear soubory v tmp/pids, tmp:sessions:clear soubory v tmp/sessions  a tmp:sockets:clear zase v tmp/sockets. Nejúčinnější „čistič” je tmp:clear, který maže session, cache a socket soubory z tmp. Pokud si smažete celý obsah složky tmp, task tmp:create obnovuje její defaultní strukturu.

Poslední dva tasky, které zmíním, jsou log:clear a stats. První zmíněný maže obsah všech souborů *.log ve složce log/ a druhý vypisuje statistiky z aplikace, poví vám například, kolik řádků kódu, metod či tříd mají vaše kontrolery, helpery, modely a další:

blog> rake stats
(in /Users/botanicus/Public/blog)
+----------------------+-------+-------+---------+---------+-----+-------+
| Name                 | Lines |   LOC | Classes | Methods | M/C | LOC/M |
+----------------------+-------+-------+---------+---------+-----+-------+
| Controllers          |   241 |   189 |      10 |      43 |   4 |     2 |
| Helpers              |    24 |    23 |       0 |       1 |   0 |    21 |
| Models               |    29 |    24 |       6 |       2 |   0 |    10 |
| Libraries            |     0 |     0 |       0 |       0 |   0 |     0 |
| Components           |     0 |     0 |       0 |       0 |   0 |     0 |
| Integration tests    |     0 |     0 |       0 |       0 |   0 |     0 |
| Functional tests     |   162 |   117 |      18 |      27 |   1 |     2 |
| Unit tests           |    74 |    55 |       6 |       9 |   1 |     4 |
+----------------------+-------+-------+---------+---------+-----+-------+
| Total                |   530 |   408 |      40 |      82 |   2 |     2 |
+----------------------+-------+-------+---------+---------+-----+-------+
  Code LOC: 236     Test LOC: 172     Code to Test Ratio: 1:0.7

Vlastní tasky v railsové aplikaci

Doporučená cesta vlastních tasků v Ruby on Rails se trochu liší od způsobu, na který jsme zvyklí z běžných nerailsových aplikací. Když se v hlavní složce aplikace podíváte do souboru Rakefile, budete upozorněni, že své tasky máte ukládat do složky lib/tasks a že mají mít příponu .rake, čili to bude vypadat asi takto:

blog> cat lib/tasks/hello.rake
task :hello do
  puts("Hello from Rake in Ruby on Rails application!")
end
blog> rake hello
(in /Users/botanicus/Public/blog)
Hello from Rake in Ruby on Rails application!

Co se v Rake chystá nového?

Rake se stále poměrně rychle vyvíjí, například metoda multitask byly přidána v nynější aktuální verzí, tedy v Rake 0.7.3. Do budoucna se plánuje do Rake přidat lepší podporu pro specifické tasky. V tomto kontextu se nejčastěji mluví o tascích pro kompilaci javovského kódu. Mluví se také o defaultních tascích, které by běžely kdekoliv i bez přítomnosti jakéhokoliv souboru Rakefile, o autogenerování závislostí a o lepší podpoře instalačních utilitek. Ze závažných problémů by měl v „balíčkotvorných” tascích být řešen problém kolize jmen při tvorbě více balíčků a chystá se také možnost vypnutí warning módu.

Příště

Po pěti dílech strávených povídáním o Rake zase zvedneme kotvy a posuneme se o něco dále. Protože dokumentace kódu je velmi důležitá činnost, již by měl každý programátor důsledně provádět, budeme se věnovat právě dokumentaci – řeč bude o ri  a rdoc.

Našli jste v článku chybu?

8. 10. 2007 15:00

Nemyslim si, ze by to tak bylo :) Vyvojaru v Ruby je spoustu, v Rails jeste vic. Pravda, ze u nas to malokdo dela jako svuj job, to ale neznamena, ze /by/ to jako job delat nemohl, kdyby byla prilezitost. Kdyz bude poptavka, nabidka bude taky. Jinak nevim, ze by u nas delala nejaka firma ciste Ruby, Railsy vsak dela firem nekolik, urcite pres 4.

8. 10. 2007 9:13

uživatel si přál zůstat v anonymitě
Docela by mne zajimalo, zda existuji vyvojari pro Ruby a RoR. Myslim volna vyvojova kapacita (jednotlivci, firmy atd.). Co jsem slysel, tak vsichni jsou zavaleni praci. Je to tak?
Podnikatel.cz: Zavře krám u #EET Malá pokladna a Teeta?

Zavře krám u #EET Malá pokladna a Teeta?

Vitalia.cz: Jmenuje se Janina a žije bez cukru

Jmenuje se Janina a žije bez cukru

Podnikatel.cz: EET: Totálně nezvládli metodologii projektu

EET: Totálně nezvládli metodologii projektu

Podnikatel.cz: Přehledná titulka, průvodci, responzivita

Přehledná titulka, průvodci, responzivita

Vitalia.cz: 7 druhů hotových těst na vánoční cukroví

7 druhů hotových těst na vánoční cukroví

DigiZone.cz: ČRa DVB-T2 ověřeno: Hisense a Sencor

ČRa DVB-T2 ověřeno: Hisense a Sencor

Vitalia.cz: Znáte „černý detox“? Ani to nezkoušejte

Znáte „černý detox“? Ani to nezkoušejte

Vitalia.cz: Jedlé kaštany jsou trpké, je třeba je tepelně upravit

Jedlé kaštany jsou trpké, je třeba je tepelně upravit

Vitalia.cz: „Připluly“ z Německa a možná obsahují jed

„Připluly“ z Německa a možná obsahují jed

Lupa.cz: Co se dá měřit přes Internet věcí

Co se dá měřit přes Internet věcí

Podnikatel.cz: Chaos u EET pokračuje. Jsou tu další návrhy

Chaos u EET pokračuje. Jsou tu další návrhy

120na80.cz: Na ucho teplý, nebo studený obklad?

Na ucho teplý, nebo studený obklad?

Podnikatel.cz: Chtějte údaje k dani z nemovitostí do mailu

Chtějte údaje k dani z nemovitostí do mailu

Měšec.cz: U levneELEKTRO.cz už reklamaci nevyřídíte

U levneELEKTRO.cz už reklamaci nevyřídíte

Podnikatel.cz: Babiše přesvědčila 89letá podnikatelka?!

Babiše přesvědčila 89letá podnikatelka?!

Vitalia.cz: Mondelez stahuje rizikovou čokoládu Milka

Mondelez stahuje rizikovou čokoládu Milka

Lupa.cz: Insolvenční řízení kvůli cookies? Vítejte v ČR

Insolvenční řízení kvůli cookies? Vítejte v ČR

Vitalia.cz: Proč vás každý zubař posílá na dentální hygienu

Proč vás každý zubař posílá na dentální hygienu

Měšec.cz: mBank cenzuruje, zrušila mFórum

mBank cenzuruje, zrušila mFórum

Podnikatel.cz: Podnikatelům dorazí varování od BSA

Podnikatelům dorazí varování od BSA