Rake: Not Your Father's Build Tool


Published on

Rake is a fantastic tool

Published in: Technology
1 Comment
  • Liked it
    Are you sure you want to  Yes  No
    Your message goes here
  • Be the first to like this

No Downloads
Total views
On SlideShare
From Embeds
Number of Embeds
Embeds 0
No embeds

No notes for slide

Rake: Not Your Father's Build Tool

  1. 1. rakeNot your father’s build tool 1
  2. 2. whatchutalk’nboutwillis• Where it came from• What it’s related to• How to use it 2
  3. 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. 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. 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. 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. 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. 8. Comparison make ant rakeImperative Style Imperative Style Dependency Based External DSL External DSL Internal DSLCustom Syntax XML based Syntax Ruby Syntax 8
  9. 9. Imperative Style 9
  10. 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
  11. 11. Dependency Based 11
  12. 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. 13. Comparison make ant rakeImperative Style Imperative Style Dependency Based External DSL External DSL Internal DSLCustom Syntax XML based Syntax Ruby Syntax 13
  14. 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
  15. 15. Hello World 15
  16. 16. Building Blocks of Rake• task • FileUtils• file • clean• directory • clobber• namespace• multitask 16
  17. 17. taskIn the DSL of rake, a task is a method that takestwo arguments. The first argument is a hash, andthe second is a block. 17
  18. 18. task dependencies 18
  19. 19. fileRake file tasks are most similar to tasks in make.They get run only when needed. File tasks aredeclared using a string rather than a symbol. Thefollowing file task creates a executable program(named prog) given two object files name a.o andb.o. 19
  20. 20. directoryIt is common to need to create directories upondemand. The directory convenience method is ashort-hand for creating a FileTask that creates thedirectory. 20
  21. 21. directoryThe directory method does not accept prerequisitesor actions, but both prerequisites and actions canbe added later. 21
  22. 22. namespaces 22
  23. 23. multitaskMultitask can help you save time by running tasksin your build that are safe to run in parallel. 23
  24. 24. multitaskIt even has the ability to determine anyprerequisites that need to be run before hand. Itwill complete this prep_for_copy only once then thethree tasks would begin to run together. 24
  25. 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. 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. 27. Built In Tasks• GemPackageTask (in Ruby Gems now)• PackageTask• RdocTask (in Rdoc now)• TestTask 27
  28. 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. 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. 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
  31. 31. Thank You• tyler.bird@gmail.com• @filmprog• filmprog.com 31