A simple way to deploy your Rails applications

When I have a very simple Rails app, I avoid adding Capistrano or any other complex tool to deploy it.

Instead, I use a simple shell script, which access the server via SHH and do what needs to be done:

#! /bin/bash
# script/deploy.sh

TAG=deployed_at_$(date +"%F_%H-%M")

git tag -m '' -a $TAG
git push --tags

ssh user@your_domain.com << 'SSH'
  cd /var/rails_apps/my_app
  rm -rf public/assets
  git pull
  bundle install --without development test
  bundle exec rake db:migrate db:seed assets:clean assets:precompile
  touch tmp/restart.txt
  git describe > public/version
SSH

After that, a tag will be created in the git repository. Now, you know exactly the date and time when it was deployed.

Also, you can find out which version (tag from git) is in production by accessing the URL http://your_domain.com/version.

your_domain


Update from March 8, 2013:

I’ve created another script which accepts a -q (quick) flag:

#! /bin/bash
# script/deploy.sh

create_tag(){
  TAG=deployed_at_$(date +"%F_%H-%M")

  git tag -m '' -a $TAG
  git push --tags
}

quick_deploy(){
  echo 'Starting quick deploy...'

  create_tag

  ssh yourserver.com << 'SSH'
    cd /var/rails_apps/app_name
    git pull
    bundle install --without development test
    touch tmp/restart.txt
    git describe > public/version
SSH
}

complete_deploy(){
  echo 'Starting complete deploy...'

  create_tag

  ssh yourserver.com << 'SSH'
    cd /var/rails_apps/app_name
    rm -rf public/assets
    git pull
    bundle install --without development test
    bundle exec rake db:migrate db:seed assets:clean assets:precompile
    touch tmp/restart.txt
    git describe > public/version
SSH
}

if [ $1 ]; then
  if [ "$1" == '-q' ] || [ "$1" == '--quick' ]; then
    quick_deploy
  else
    echo -e 'Usage: script/deploy [OPTIONS]\n\nOptions:\n-q --quick: Deploy without running migrations nor re-precompiling assets.\n'
  fi
else
  complete_deploy
fi

Deixe um comentário