public
Description: Capistrano Recipies for God
Homepage: http://github.com/jnewland/san_juan
Clone URL: git://github.com/jnewland/san_juan.git
san_juan / README.textile
100644 137 lines (108 sloc) 3.91 kb

Description

Want Capistrano to talk to God? Find San Juan

Requirements

Install


git clone git://github.com/jnewland/san_juan.git
cd san_juan
gem build san_juan.gemspec
sudo gem install -l san_juan-*.gem

Usage

In your Capistrano deploy recipie:


require 'san_juan'

role :app, 'foo.example.com'
role :web, 'bar.example.com'

san_juan.role :app, %w(mongrels memcached)
san_juan.role :web, %w(nginx)

Now, check out cap -T:


  ...
  cap god:all:quit                # Quit god, but not the processes it's monito...
  cap god:all:reload              # Reloading God Config
  cap god:all:start               # Start god
  cap god:all:start_interactive   # Start god interactively
  cap god:all:status              # Describe the status of the running tasks on...
  cap god:all:terminate           # Terminate god and all monitored processes
  cap god:app:memcached:log       # Log memcached
  cap god:app:memcached:remove    # Remove memcached
  cap god:app:memcached:restart   # Restart memcached
  cap god:app:memcached:start     # Start memcached
  cap god:app:memcached:stop      # Stop memcached
  cap god:app:memcached:unmonitor # Unmonitor memcached
  cap god:app:mongrels:log        # Log mongrels
  cap god:app:mongrels:remove     # Remove mongrels
  cap god:app:mongrels:restart    # Restart mongrels
  cap god:app:mongrels:start      # Start mongrels
  cap god:app:mongrels:stop       # Stop mongrels
  cap god:app:mongrels:unmonitor  # Unmonitor mongrels
  cap god:app:quit                # Quit god, but not the processes it's monito...
  cap god:app:reload              # Reload the god config file
  cap god:app:start               # Start god
  cap god:app:start_interactive   # Start god interactively
  cap god:app:terminate           # Terminate god and all monitored processes
  cap god:web:nginx:log           # Log nginx
  cap god:web:nginx:remove        # Remove nginx
  cap god:web:nginx:restart       # Restart nginx
  cap god:web:nginx:start         # Start nginx
  cap god:web:nginx:stop          # Stop nginx
  cap god:web:nginx:unmonitor     # Unmonitor nginx
  cap god:web:quit                # Quit god, but not the processes it's monito...
  cap god:web:reload              # Reload the god config file
  cap god:web:start               # Start god
  cap god:web:start_interactive   # Start god interactively
  cap god:web:terminate           # Terminate god and all monitored processes
  ...

To make capistrano start, stop, and restart your app using God, override the
deploy:start, deploy:stop, and deploy:restart tasks:


namespace :deploy do
  desc "Use god to restart the app"
  task :restart do
    god.all.reload #ensures any changes to the god config are applied at deploy
    god.app.mongrels.restart
    # god.web.nginx.restart
    # ...
  end

  desc "Use god to start the app"
  task :start do
    god.all.start
  end

  desc "Use god to stop the app"
  task :stop do
    god.all.terminate
  end
end

Tweaks

A few of the tasks in the god:all namespace require the path to your god
configuration file. This defaults to:

"#{current_path}/config/god/#{role}.god"

This can be changed by setting the god_config_path capistrano variable:


require 'san_juan'

set :god_config_path, "/path/to/config"

role :app, 'foo.example.com'
role :web, 'bar.example.com'

san_juan.role :app, %w(mongrels memcached)
san_juan.role :web, %w(nginx)


Author

Jesse Newland

License

WTFPL