Parametry z příkazové řádky
Rake stejně jako téměř každá jiná unixová řádková utilitka umožňuje ovlivňovat své chování pomocí parametrů. Jeho obecná syntaxe vypadá takto:
rake [options] [variable=value] [task]
Patrně nejužitečnější parametr vůbec je --tasks
, který slouží k vypsání tasků. Optimálně mu lze regulárním výrazem napovědět, jaké tasky si přejeme vypsat:
rubybook> rake --tasks ^cl (in /Users/botanicus/Documents/Publications/RubyBook) rake clean # Remove any temporary products. rake clobber # Remove any generated file.
--prereqs
čili -P
umožňuje vypsání úkolů s jejich závislostmi:
rubybook> rake -P (in /Users/jakubstastny/Documents/Publications/RubyBook) rake backup clean rake build gencontent rake clean rake clobber clean rake default build clean rubybook.tex (... zkráceno ... )
Z příkazové řádky lze též jednoduše nastavit hodnotu proměnné. Ta bude v Rakefile dostupná skrze konstantu ENV, která standardně obsahuje proměnné prostředí:
task :debug do puts("Ruby: #{ENV["ruby"]}") end
rubybook> rake ruby=`which ruby` debug (in /Users/botanicus/Documents/Publications/RubyBook) Ruby: /usr/local/bin/ruby
Pro úplnost raději dodám, že mezi proměnnou, rovná se a hodnotou proměnné nesmí být mezera. Je tomu tak proto, že shell mezeru používá pro oddělování parametrů – variable=name
je jeden argument, kdežto variable = name
jsou argumenty tři – variable
, =
a name
.
Velmi užitečný je též parametr --dry-run
či zkráceně -n
, který umožňuje vypsání prováděných akcí, aniž by byly skutečně spuštěny:
rubybook> rake -n backup (in /Users/botanicus/Documents/Publications/RubyBook) ** Invoke backup (first_time) ** Invoke clean (first_time) ** Execute (dry run) clean ** Execute (dry run) backup
Pro ladění se často používá --trace
, -t
, který vypisuje průběh úkolu:
rubybook> rake --trace build (in /Users/jakubstastny/Documents/Publications/RubyBook) ** Invoke build (first_time) ** Invoke gencontent (first_time) ** Execute gencontent ** Execute build TeXExec 5.2.4 - ConTeXt / PRAGMA ADE 1997-2005 executable : pdfetex format : cont-en (Průběh sázení dokumentu.)
Z dalších užitečných parametrů bych uvedl --libdir=<directory>
či zkráceně -I
který umožňuje přidání námi zadané složky do proměnné $: , v níž jsou vyhledávány knihovny pro Ruby a --require [file]
čili -r [file]
umožňující nahrání požadovaného souboru před spuštěním Rakefile. Za povšimnutí stojí také volba --rakefile [rakefile]
či -f [rakefile]
, která umožňuje zadat jméno souboru, který se použije jako Rakefile. Rake má ještě spoustu dalších užitečných parametrů, nemá však cenu zde suplovat manuál, rake --help
případným zájemcům poví více.
Závislosti pod lupou
Jak již víte z minula, Rake umožňuje vytvářet závislosti úkolů. Nejjednodušší cestou je jednoduchá závislost:
task :backup => :clean do block end
Rakefile
, je běžný kód v Ruby, ačkoliv právě tvorba tasků tak nemusí vypadat. Tvorba úkolů funguje jako volání metody task
, které předáme hash s klíčem :name
a hodnotou :clean
:
hash = Hash.new task(hash[:backup] = :clean) do (block) end
Když zavoláme rake backup
, Rake najde task backup
a všimne si, že ten závisí na úkolu clean
. Vykoná tedy task clean
a vrátí se k tasku backup
, který nyní již vykoná. To není nic složitého a nepochopitelného, ostatně zmínil jsem to již minule.
Samozřejmě že mnohdy závislost na jednom tasku nestačí, v tom případě uvedeme jednoduše pole s úkoly, na nichž ten aktuální závisí:
task :build => [:build, :clean] do block end
Co ale dělat, když je task v jiném namespace? Odpověď je prostá – stačí uvést task ve tvaru "namespace:task"
, třeba takto:
task :build_all => ["main:build", "samples:build"]
Synonymní názvy pro různé úkoly
Jednomu úkolu lze jednoduše přiřadit různé názvy:
task :build => :build_all_files
Teď místo dlouhého rake build_all_files
lze volat jednoduše pouze rake build
. Tohoto triku lze šikovně využít například k určení tasku default
:
task :default => :backup
Jak jste jistě pochopili, touto cestou jsem učinil defaultním taskem :backup
a tedy volání rake
bez parametrů zavolá právě jej.
Příště
V příštím díle se podíváme na další typy tasků jako jsou například paralelně spouštěné tasky či tasky souborové a dále se budeme věnovat knihovnám pro tvorbu úkolů – například knihovny pro snadnou tvorbu uklízecích tasků, tasků generujících rdoc dokumentaci či gemový balíček případně umožňující elegantní řešení běhu testů. Pokud zbude čas, přijdou na přetřes metody pro práci se systémem a soubory, řeč bude především o FileList
.