Categories: archive |code

My Jekyll Rake File

Perhaps once I get off my lazy butt, I’ll upload my Jekyll setup to Github. In the meantime, I want to show off my Rake file, which I use to deploy this blog.

task :default => [:"site:deploy:dev"]

namespace :site do
  desc "deletes _site"
  task :delete do
    puts "deleting _site"
    system('rm -r _site')
    puts "deleting _site complete"
  end

  desc "build _site"
  namespace :build do
    desc "build and deploy dev"
    task :dev => :delete do
      puts "building _site"
      system('jekyll --server')
    end

    desc "build pro"
    task :pro => :delete do
      puts "building production _site"
      system('jekyll')
      puts "building _site complete"
    end

  end

  desc "change environment"
  namespace :env do
    desc "change to development environment"
    task :dev do
      puts "change to dev environment"
      updateConfig "env: dev"
    end

    desc "change to production environment"
    task :pro do
      puts "change to pro environment"
      updateConfig "env: pro"
    end
  end

  desc "rsync _site"
  task :rsync => :"build:pro" do
    system('rsync -avrz _site/ nemo7467@www.davidwparker.com:davidwparker.com')
  end

  desc "rsync _site's CSS"
  task :rsync_css => :"build:pro" do
    system('rsync -avrz _site/css nemo7467@www.davidwparker.com:static.davidwparker.com')
  end

  desc "deploy the application"
  namespace :deploy do
    desc "builds the development _site"
    task :dev => [:"env:dev",:"build:dev"] do
      puts "dev site deployed"
    end

    desc "builds the production _site and deploys it"
    task :pro => [:"env:pro",:rsync,:rsync_css] do
      puts "pro site deployed"
    end
  end
end

private
  def updateConfig(rep)
    lines = IO.readlines("_config.yml");
    lines[-1] = rep
    File.open("_config.yml","w") do |file|
      lines.each do |line|
        file.write(line)
      end
    end
  end

Basically, the overall gist is that I have ssh keys setup with Dreamhost and I can use a single command to deploy to production rake site:deploy:pro. I haven’t seen too many sites that have a difference for development versus production, but I went ahead and added an env variable in my _config.yml so that I could distinguish where I was working. The main reason for this is for: 1) google-analytics are not deployed in development and 2) CSS is served from a subdomain within my domain on production. I really like this approach and it works well for me. If you have something similar, let me know, as I’d definitely be interested.