Poor Man's Git Deployment System
Poor man’s git based deployment for a Rails app on cheap shared hosting (runs under passenger):
# remove the database.yml so we Don't get a merge-conflict
# we don't want to keep the config in git, especially if its posted online like
# GitHub
rm config/database.yml
# git pull the new code down, saving the output to a file for later
# processing
env -i git pull --stat | tee tmp/last-pull.txt
# If that last pull included the word "Gemfile" then trigger bundle install
if grep -q Gemfile tmp/last-pull.txt; then
bundle install
fi
# if that last pull included any migrations, then trigger rake db:migrate
if grep -q migrate tmp/last-pull.txt; then
rake db:migrate
fi
# restore the backup database.yml
cp efh.database.yml config/database.yml
# changing the time stamp on tmp/restart.txt tells passenger to reload the
# application on the next request
touch tmp/restart.txt
# Fire a request to make passenger boot
curl http://electricfieldhockey.com
Then just add a git hook:
while read oldrev newrev refname
do
branch=$(git rev-parse --symbolic --abbrev-ref $refname)
if [ "master" == "$branch" ]; then
cd ~/electricfieldhockey.com
./deploy.sh
fi
done