1
0
Fork 0
mirror of https://github.com/capistrano/capistrano synced 2023-03-27 23:21:18 -04:00

support primary syntax

This commit is contained in:
seenmyfate 2013-03-22 16:29:11 +00:00
parent d60c2ffe07
commit 5b504e3791
5 changed files with 28 additions and 5 deletions

View file

@ -29,7 +29,9 @@ TODO:
- [x] support existing significant configuration variables
- [x] set configuration defaults, add commented out examples to templates
- [x] basic rollback
- [ ] support primary servers `on primary(:db)`
- [x] support primary servers `on primary :db`
- [ ] rails specific tasks
- [ ] auto load tasks for scm based on variable
- [ ] better descriptions for tasks
- [ ] add examples to README
@ -78,10 +80,12 @@ To create different stages:
ask :branch, :master
role :app, %w{example.com}
role :app, %w{example.com example2.com}
role :web, %w{example.com}
role :db, %w{example.com}
# the first server in the array is considered primary
## Tasks
## Before / After

View file

@ -33,6 +33,10 @@ module Capistrano
roles.fetch_roles(names)
end
def primary(role)
roles.fetch_primary(role)
end
def configure_backend
SSHKit.configure do |sshkit|
sshkit.format = fetch(:format)
@ -117,6 +121,10 @@ module Capistrano
roles_for(names).flatten.uniq
end
def fetch_primary(role)
fetch(role).first
end
def each
roles.each { |role| yield role }
end

View file

@ -26,6 +26,10 @@ module Capistrano
env.roles_for(names)
end
def primary(role)
env.primary(role)
end
def env
Configuration.env
end

View file

@ -108,8 +108,11 @@ namespace :deploy do
desc 'Clean up old releases'
task :cleanup do
releases = on primary :app do
capture(:ls, '-xt', releases_path).split.reverse
end
on roles :all do
releases = capture(:ls, '-xt', releases_path).split.reverse
if releases.count >= fetch(:keep_releases)
info t(:keeping_releases, keep_releases: fetch(:keep_releases), releases: releases.count)
directories = (releases - releases.last(fetch(:keep_releases))).map { |release|
@ -121,7 +124,7 @@ namespace :deploy do
desc 'Log details of the deploy'
task :log_revision do
on roles :app do
on primary :app do
within releases_path do
execute %{echo "#{revision_log_message}" >> #{revision_log}}
end
@ -130,11 +133,14 @@ namespace :deploy do
desc 'Rollback to the last release'
task :rollback do
on roles :app do
on primary :app do
last_release = capture(:ls, '-xt', releases_path).split[1]
set(:rollback_release_timestamp, last_release)
set(:branch, last_release)
set(:revision_log_message, rollback_log_message)
end
on roles :app do
%w{check finalize restart finishing finished}.each do |task|
invoke "deploy:#{task}"
end

View file

@ -2,6 +2,7 @@ namespace :git do
desc 'Check that the repository exists'
task :check do
fetch(:branch)
on roles :all do
unless test "[ -d #{repo_path} ]"
within deploy_path do