3. What’s in a name?
• Usually the first thing people learn about
rake is the etymology of the name: “Ruby
Make”.
• But it’s much more than a catchy turn of
phrase.
• It’s a fully featured Build Language. That
almost never existed...
3
4. Ruby Version of Make?
• Jim tells the birth of rake as code he never
intended to write.
• It started with a simple itch to scratch...
4
5. Jim Thought “What if...”
"What if you could specify the make tasks in Ruby, like this ..."
task "build" do
java_compile(...args, etc ...)
end
"The task function would register "build" as a target to be made,
and the block would be the action executed whenever the build
system determined that it was time to do the build target."
5
6. 100 Lines Later
• It worked!
• Rake’s prototype lives in the repo:
doc/proto_rake.rdoc
• But it didn’t have timebased file
dependencies... so back to the text-editor.
• And the rest is in the commit history.
6
7. A Build Language
• The basic unit of a build language are tasks.
• A build has source files that it uses to
produce a desired product.
• The two most common other build
languages are make and ant.
7
8. Comparison
make ant rake
Imperative Style Imperative Style Dependency Based
External DSL External DSL Internal DSL
Custom Syntax XML based Syntax Ruby Syntax
8
10. Imperative Style
• Both the code_generation methods will be
called during test.
• At best that will waste time.
• At worst that can produce undesired
results.
10
12. Dependency Based
• A dependency based system gives the test
method the power to evaluate what
prerequisites it has.
• Then because ruby can evaluate the code
without running it, it can prepare it to be
run in the correct order that will only run
each task once.
12
13. Comparison
make ant rake
Imperative Style Imperative Style Dependency Based
External DSL External DSL Internal DSL
Custom Syntax XML based Syntax Ruby Syntax
13
14. External vs Internal DSL
• With make and ant you need to use
external scripts or nasty syntax to be
creative.
• Rake can use full power of Ruby at any
time.
14
19. file
Rake file tasks are most similar to tasks in make.
They get run only when needed. File tasks are
declared using a string rather than a symbol. The
following file task creates a executable program
(named prog) given two object files name a.o and
b.o.
19
20. directory
It is common to need to create directories upon
demand. The directory convenience method is a
short-hand for creating a FileTask that creates the
directory.
20
21. directory
The directory method does not accept prerequisites
or actions, but both prerequisites and actions can
be added later.
21
24. multitask
It even has the ability to determine any
prerequisites that need to be run before hand. It
will complete this prep_for_copy only once then the
three tasks would begin to run together.
24
25. FileUtils
• Use the FileUtils module and rake gives you
the most common filesystem commands:
• cd, pwd, mkdir, mkdir_p, rmdir, ln, ln_s,
ln_sf, cp, cp_r, mv, rm, rm_r, rm_rf, install,
chmod, touch
• Create a map of files with FileList:
• FileList[‘**/*.rb’].each {|f| puts f}
25
26. Clean/Clobber
• require 'rake/clean'
• Use a pair of file lists: CLEAN and CLOBBER.
• You can then add items to the file lists with
expressions like CLEAN.include('*.o').
• Remember that the clean task removes everything
in the clean list, and clobber removes everything in
both lists.
26
27. Built In Tasks
• GemPackageTask (in Ruby Gems now)
• PackageTask
• RdocTask (in Rdoc now)
• TestTask
27
28. Rake & Rails
• The default task for a rails project runs
your test suite.
• If you want to see how the rake tasks you
enjoy with Rails are built search for .rake in
the gem source.
• Because as we all know, Rails is Magic!
28
29. rake
• Jim Weirich created in 2003.
• Similar to make and ant. With the power of
Ruby.
• Hope you’ve got some ideas on how you’d
like to use it.
29
30. Credits
• Jim Weirich - Rake
http://rake.rubyforge.org/
• Martin Fowler - Using the Rake Build
Language
http://martinfowler.com/articles/rake.html
• Josh Nichols - Rake: The Familiar Stranger
http://vimeo.com/2496890
30