rake utility and
Rakefile are Ruby's version of
Personally, I find
rake much more pleasant to work with than
While it is written in Ruby, you can use it as task runner for a project
of any language.
Rake was created originally by the late Jim Weirich who can has a lecture on the topic from RailsCons 2012:
IF you want to learn more about all the possibilities, check out the Rakefile documentation.
You can check if
rake is installed by running one of the following:
rake --help ruby -S rake --help
If you need to install
rake, see your operating system's available
packages, or install it using
gem install rake
If you are interested in building from source, you can find it on on GitHub: https://github.com/ruby/rake
Basic rake commands
Here are a few basic rake commands. See
rake --help for more details.
rake will look for a
Rakefile in your current directory.
The next section provides an example
Rakefile that defines a few
# Run default task in Rakefile rake # Don't actually execute tasks rake --dry-run # Execute a specific job rake <target_name>
Here is an example
Rakefile that has some basic procedures for
building and installing a Debian package
.deb. Just run
the directory with the
This is a modified example from a real build project of mine. I have commented
out the actual shell commands so that this file can be copy/pasted and used
rake commands without making any system changes. I left the example
commands there there though to demonstrate how you can make use of
shell commands by using the backticks.
This demonstrates how you can easily convert a
Rakefile by still calling the same underlying shell commands while
still getting the power of Ruby and improved readability.
# Rakefile task default: [:clean, :build, :install] task :clean do puts "Cleaning packages" # `rm *.deb` end task :build do puts "Building mypackage-0.0.0" # `dpkg -b ./mypackage-0.0.0 ./mypackage-0.0.0.deb` puts 'Try `rake install` now.' end task :uninstall do puts 'Uninstalling mypackage' # `sudo apt-get remove -y mypackage` end task :install => [:uninstall] do puts 'Installing mypackage-0.0.0' # `sudo apt-get install -y ./mypackage-0.0.0.deb` end
Example usage of the above
rake # runs default task (all the steps) rake clean rake build rake uninstall rake install
You can create separate namespaces to isolate tasks that may have the same name or just to create logical grouping.
# Rakefile namespace :db do task :backup do puts 'Performing database backup...' end end namespace :files do task :backup do puts 'Performing files backup...' end end task backup_all: ['db:backup', 'files:backup'] task default: :backup_all
Then you can invoke it in a few ways, depending on which tasks you want to run:
rake rake backup_all rake db:backup rake files:backup
You should have a basic understanding of how to use
rake and create
Rakefile. Rake has several more powerful features that aren't
covered here and I encourge further reading on the topic.