Use rake to manage a static site project built with Jekyll.

See also Make Jekyll recipe for an equivalent Makefile version of this Rakefile. Though make is not standard on Windows. While if you have Ruby, you probably have rake too, on any OS.

Setup

  • Rakefile
      task default: %w[install]
    
      desc "Install and build"
      task :all => [:install, :build]
    
    
      desc "Install gems"
      task :install do
        sh "bundle config set --local path vendor/bundle"
        sh "bundle install"
      end
    
      desc "Upgrade gems"
      task :upgrade do
        sh "bundle update"
      end
    
    
      desc "Start dev server"
      task :serve do
        sh "bundle exec jekyll serve --trace --livereload"
      end
      task :s => :serve
    
      desc "Production build"
      task :build do
        sh "JEKYLL_ENV=production bundle exec jekyll build --trace"
      end
    

Usage

Show tasks

Note these will be sorted for you in the output.

$ rake --tasks
rake all      # Install and build
rake build    # Production build
rake install  # Install gems
rake serve    # Start dev server
rake upgrade  # Upgrade gems

Run tasks

$ rake all

Omit a target to the default option, in this case install.

$ rake

Use an alias.

$ rake serve
$ # OR
$ rake s

Notes

Rake dependency

In your docs, you might want to list rake as a system dependency, like Ruby. This should hopefully be installed at the system or user level, but possibly an old version.

This can be installed globally with:

$ gem install rake  # --user-install

Or:

$ gem update --user-install

You could add rake to a Gemfile like this. Though you end up with a circular flow where you use rake to setup Gemfile to get rake. Also, I need to check - does rake run the local rake like with bundle exec rake. If not, then don’t bother setting up rake in Gemfile.

gem 'rake', '~> 13.0'

Default

Both approaches give the same result.

  • According to the rake repo docs, a default task can be set as this. I don’t know what that %w is about.
      task default: %w[install]
    
  • Following the style of other tasks in the Rakefile above, I arrived at this default task.
      task :default => [:install]