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_articles.rb, 002_create_posts.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
.