Skip to content

HTTPS clone URL

Subversion checkout URL

You can clone with
or
.
Download ZIP
Deploy Rails applications automatically by running Capistrano tasks with Git post-commit hooks
Ruby
branch: experiments

This branch is 10 commits ahead, 34 commits behind master

Fetching latest commit…

Cannot retrieve the latest commit at this time

Failed to load latest commit information.
.gitignore
README.rdoc
Rakefile
config.example.yml
pushr.rb

README.rdoc

Pushr

Deploy Rails applications by Github Post-Receive URLs launching Capistrano's cap deploy

Why? Because my friend Machal still cannot fix Capistrano on his Windows box and can now deploy with GitGUI. (No need to launch “DOS” for him when only thing he did is fixing some CSS or updating some assets.)

Because it could be cool, what you think?

It's a working experiment at the moment! AN APLHA! :) Obviously, do not use on mission critical deployments.

What?

Pushr assumes this:

  • You deploy a Rails application with Capistrano in standard settings

  • You have a “deploy” branch in your repo, which you deploy on production (and possibly deploy “master” on staging)

  • You have installed Capistrano et al. on the server you are deploying

  • You have a deploy.rb in your repository (and use SSH keys! you should!) or symlink deploy.rb

  • You are willing and able to run a Ruby application open to teh internet on the same machine as your Rails application

  • You are not anxiously awaiting how the cap deploy task ends. You just check the results from time to time.

  • You have tests for your application and you run them in Capistrano before hook (so you don't end up deploying breakz)

  • You have set a post-receive hook for your repository, calling specific URL. See section below for Github guide.

Pushr calls Capistrano's cap deploy task whenever you push to the repository with the hook.

Currently it logs the output into a file and updates status for configured Twitter account. Other notifications? Sure, later.

You can also deploy by literally pushing a button on Pushr's page.

Want to try it out?

Install or update following Rubygems on the local machine or server where you want to run it:

$ sudo gem install sinatra rack haml capistrano capistrano-ext

Rename and edit the configuration file:

$ cp config.example.yml config.yml
$ vim config.yml

Run the app in production (nohup):

rake start:production

Set up Github Post-Receive URL (github.com/guides/post-receive-hooks) in your repo's administration to:

http://{YOUR SERVER}:4000?token={TOKEN SET IN CONFIG}

Load the URL in the browser. You should see some info about deployed revision.

Then do a git push to the git repo. Your application is updated with Capistrano. Done.

(Of course, you can use Git's post-receive hook in any repo, not just on Github. You would be curl-ing that URL or something like that then.)

Todos

  • !

    Implement HTTP-Auth while Github can do it now (github.com/blog/237-basic-auth-post-receives)

  • !

    Deploy only when pushed to “deploy” branch

  • Visualize deploy.log on webpage in a sparkline graph (succeeded/failed deploys, show relevant portion of deploy.log for each deploy, etc)

  • Improve & separate Notifications (Twitter, e-mail, Jabber, …)

Something went wrong with that request. Please try again.