Skip to content

HTTPS clone URL

Subversion checkout URL

You can clone with HTTPS or Subversion.

Download ZIP
tree: 81d1ec6042
Fetching contributors…

Cannot retrieve contributors at this time

145 lines (119 sloc) 4.417 kb
require 'capistrano/cli'
module Sprinkle
module Actors
# = Capistrano Delivery Method
#
# Capistrano is one of the delivery method options available out of the
# box with Sprinkle. If you have the capistrano gem install, you may use
# this delivery. The only configuration option available, and which is
# mandatory to include is +recipes+. An example:
#
# deployment do
# delivery :capistrano do
# recipes 'deploy'
# end
# end
#
# Recipes is given a list of files which capistrano will include and load.
# These recipes are mainly to set variables such as :user, :password, and to
# set the app domain which will be sprinkled.
class Capistrano
attr_accessor :config, :loaded_recipes #:nodoc:
def initialize(&block) #:nodoc:
@config = ::Capistrano::Configuration.new
@config.logger.level = Sprinkle::OPTIONS[:verbose] ? ::Capistrano::Logger::INFO : ::Capistrano::Logger::IMPORTANT
@config.set(:password) { ::Capistrano::CLI.password_prompt }
@name_counters = Hash.new { |h, v| h[v] = 0 }
if block
self.instance_eval(&block)
else
@config.load 'deploy' # normally in the config directory for rails
end
end
# Defines a recipe file which will be included by capistrano. Use these
# recipe files to set capistrano specific configurations. Default recipe
# included is "deploy." But if any other recipe is specified, it will
# include that instead. Multiple recipes may be specified through multiple
# recipes calls, an example:
#
# deployment do
# delivery :capistrano do
# recipes 'deploy'
# recipes 'magic_beans'
# end
# end
def recipes(script)
@loaded_recipes ||= []
@config.load script
@loaded_recipes << script
end
def process(name, commands, roles, suppress_and_return_failures = false) #:nodoc:
task = task_sym(name)
define_task(task, roles) do
via = fetch(:run_method, :sudo)
commands.each do |command|
invoke_command command, :via => via
end
end
begin
run(task)
return true
rescue ::Capistrano::CommandError => e
return false if suppress_and_return_failures
# Reraise error if we're not suppressing it
raise
end
end
def put(name, uploads, roles, suppress_and_return_failures = false) #:nodoc:
task = task_sym(name)
define_task(task, roles) do
uploads.each do |file, content|
put file, content
end
end
begin
run(task)
return true
rescue ::Capistrano::CommandError => e
return false if suppress_and_return_failures
# Reraise error if we're not suppressing it
raise
end
end
private
# REVISIT: can we set the description somehow?
def define_task(name, roles, &block)
@config.task name, :roles => roles, &block
end
def run(name)
@config.send name
end
def task_sym(name)
"install_#{name.to_task_name}_#{@name_counters[name] += 1}".to_sym
end
end
end
end
=begin
# channel: the SSH channel object used for this response
# stream: either :err or :out, for stderr or stdout responses
# output: the text that the server is sending, might be in chunks
run "apt-get update" do |channel, stream, output|
if output =~ /Are you sure?/
answer = Capistrano::CLI.ui.ask("Are you sure: ")
channel.send_data(answer + "\n")
else
# allow the default callback to be processed
Capistrano::Configuration.default_io_proc.call[channel, stream, output]
end
end
You can tell subversion to use a different username+password by
setting a couple variables:
set :svn_username, "my svn username"
set :svn_password, "my svn password"
If you don't want to set the password explicitly in your recipe like
that, you can make capistrano prompt you for it like this:
set(:svn_password) { Capistrano::CLI.password_prompt("Subversion
password: ") }
- Jamis
=end
Jump to Line
Something went wrong with that request. Please try again.