For my most recent project, I had to share a git repository with another Rails developer. He also had to make deploys on my server. As my server has many projects, I though about having another way than giving him access via SSH for cap deploy.
I remembered Heroku automatically deploys Rails apps after commits. So here’s how you can have the same functionality with pure Git.
Configuration of SSH And Users
I’m assuming the following configuration:
# Git repository: /home/git/awesome-rails-app.git # Deploy path: /var/www/awesome-rails-app # Git user: git # Deploy user: deploy # Authentication with SSH keys
First, create a SSH key for the user git (unless you already did so) and add it for for the deploy user and vice versa:
# log in as git: ssh-keygen -t rsa # log in as deploy: cat /home/git/.ssh/id_rsa.pub >> /home/deploy/authorized_keys ssh-keygen -t rsa # log in as git: cat /home/deploy/.ssh/id_rsa.pub >> /home/git/authorized_keys
Installing the Git Hook
Git offers some hooks, where you can add your own code. The most interestion hook for having a deploy is “post-receive”. Just add the deploy command:
# File: /home/git/awesome-rails-app.git/hooks/post-receive #!/bin/sh cd /var/www/awesome-rails-app/current && cap deploy:migrations ## If Git isn’t on the same server as the application: # ssh deploy@deploy-server.com \ # 'cd /var/www/awesome-rails-app/current && cap deploy:migrations' ## Don’t forget to add the SSH keys.
Make this file executable:
chmod +x /home/git/awesome-rails-app.git/hooks/post-receive
Finish
Now it should work:
# on your local mashine:
git push origin masterYou’ll see all commands of the cap deploy:migrations process in your console.
This post was inspired by this post. After you finished the automatical deploy, there is some other interesting homework: auto test before commits, integration your bug tracker, …














