crossroads_capistrano 1.3.61 → 1.4.0
Sign up to get free protection for your applications and to get access to all the features.
- data/crossroads_capistrano.gemspec +1 -1
- data/lib/crossroads_capistrano/recipes/defaults.rb +27 -0
- data/lib/crossroads_capistrano/recipes/deploy_permissions.rb +14 -7
- data/lib/crossroads_capistrano/recipes/hoptoad.rb +25 -21
- data/lib/crossroads_capistrano/recipes/log.rb +10 -0
- data/lib/crossroads_capistrano/recipes/passenger.rb +14 -4
- data/lib/crossroads_capistrano/recipes/revisions.rb +1 -1
- data/lib/crossroads_capistrano/recipes/rvm.rb +3 -3
- data/lib/crossroads_capistrano/recipes/shared_config.rb +9 -0
- data/lib/crossroads_capistrano/recipes/stack.rb +22 -34
- data/lib/crossroads_capistrano/recipes/thinking_sphinx.rb +1 -1
- data/lib/crossroads_capistrano.rb +5 -0
- metadata +22 -40
@@ -3,7 +3,7 @@ $:.push File.expand_path("../lib", __FILE__)
|
|
3
3
|
|
4
4
|
Gem::Specification.new do |s|
|
5
5
|
s.name = "crossroads_capistrano"
|
6
|
-
s.version = "1.
|
6
|
+
s.version = "1.4.0"
|
7
7
|
s.platform = Gem::Platform::RUBY
|
8
8
|
s.authors = ["Steve Kenworthy", "Ben Tillman", "Nathan Broadbent"]
|
9
9
|
s.email = ["it_dept@crossroads.org.hk"]
|
@@ -0,0 +1,27 @@
|
|
1
|
+
# These default recipes are always loaded unless otherwise specified
|
2
|
+
|
3
|
+
# Default recipes
|
4
|
+
# ---------------------------------------------------------
|
5
|
+
load File.join(File.dirname(__FILE__), "prompt.rb")
|
6
|
+
|
7
|
+
|
8
|
+
# Default settings
|
9
|
+
# ---------------------------------------------------------
|
10
|
+
set :default_stage, "preview"
|
11
|
+
|
12
|
+
set :scm, :git
|
13
|
+
set :deploy_via, :remote_cache
|
14
|
+
set :keep_releases, 3
|
15
|
+
|
16
|
+
set :bundle_without, [:cucumber, :development, :test]
|
17
|
+
|
18
|
+
set :httpd_user, "apache"
|
19
|
+
set :httpd_group, "apache"
|
20
|
+
|
21
|
+
default_run_options[:pty] = true
|
22
|
+
|
23
|
+
|
24
|
+
# Default hooks
|
25
|
+
# ---------------------------------------------------------
|
26
|
+
after "deploy:restart", "deploy:cleanup"
|
27
|
+
|
@@ -1,11 +1,11 @@
|
|
1
1
|
# For apps that are deployed with user permissions.
|
2
2
|
# ----------------------------------------------------------
|
3
3
|
|
4
|
-
#
|
5
|
-
set :user,
|
6
|
-
|
7
|
-
|
8
|
-
|
4
|
+
# Fetch user from ~/.netrc or $USER.
|
5
|
+
set :user, if File.exist?("~/.netrc")
|
6
|
+
File.open(`echo ~/.netrc`.strip, 'r').read[/login ([a-z_]+)/m, 1]
|
7
|
+
else
|
8
|
+
`echo $USER`.strip
|
9
9
|
end
|
10
10
|
|
11
11
|
namespace :deploy do
|
@@ -17,11 +17,17 @@ namespace :deploy do
|
|
17
17
|
desc "Apache permissions (for passenger)"
|
18
18
|
task :apache_permissions do
|
19
19
|
unless $apache_permissions
|
20
|
-
sudo "chown -R #{httpd_user}:#{
|
21
|
-
sudo "chown -R #{httpd_user}:#{
|
20
|
+
sudo "chown -R #{httpd_user}:#{httpd_group} #{current_path}/"
|
21
|
+
sudo "chown -R #{httpd_user}:#{httpd_group} #{deploy_to}/shared/"
|
22
22
|
$apache_permissions = true
|
23
23
|
end
|
24
24
|
end
|
25
|
+
|
26
|
+
desc "Set permissions on releases directory so old releases can be removed"
|
27
|
+
task :release_permissions do
|
28
|
+
run "if [ -d #{release_path}/ ]; then #{sudo} chown -R #{httpd_user}:#{httpd_group} #{release_path}/; fi"
|
29
|
+
run "if [ -d #{release_path}/ ]; then #{sudo} chmod -R 755 #{release_path}/; fi"
|
30
|
+
end
|
25
31
|
end
|
26
32
|
|
27
33
|
# Set user permissions before running each task, and apache permission when tasks finish.
|
@@ -31,4 +37,5 @@ end
|
|
31
37
|
end
|
32
38
|
|
33
39
|
before "deploy:restart", "deploy:apache_permissions"
|
40
|
+
before "deploy:cleanup", "deploy:release_permissions"
|
34
41
|
|
@@ -4,31 +4,35 @@
|
|
4
4
|
namespace :deploy do
|
5
5
|
desc "Notify Hoptoad of the deployment"
|
6
6
|
task :notify_hoptoad, :except => { :no_release => true } do
|
7
|
-
|
8
|
-
|
9
|
-
|
10
|
-
|
11
|
-
|
12
|
-
|
13
|
-
|
7
|
+
if ARGV.include?("-n")
|
8
|
+
puts "\n ** Dry run, not notifying hoptoad.\n\n"
|
9
|
+
else
|
10
|
+
begin
|
11
|
+
require 'active_support/core_ext/string'
|
12
|
+
rescue LoadError
|
13
|
+
end
|
14
|
+
require 'hoptoad_notifier'
|
15
|
+
require File.join(rails_root,'config','initializers','hoptoad')
|
16
|
+
require 'hoptoad_tasks'
|
14
17
|
|
15
|
-
|
16
|
-
|
18
|
+
# Format HoptoadTasks output nicely.
|
19
|
+
HoptoadTasks.module_eval do; def self.puts(str); super " ** #{str}\n\n"; end; end
|
17
20
|
|
18
|
-
|
19
|
-
|
21
|
+
rails_env = fetch(:hoptoad_env, fetch(:rails_env, "production"))
|
22
|
+
local_user = ENV['USER'] || ENV['USERNAME']
|
20
23
|
|
21
|
-
|
22
|
-
|
23
|
-
|
24
|
-
|
25
|
-
|
26
|
-
|
24
|
+
puts %Q{
|
25
|
+
* \033[0;32m== Notifying Hoptoad of Deploy\033[0m
|
26
|
+
- \033[0;33mUser:\033[0m #{local_user}
|
27
|
+
- \033[0;33mRails Environment:\033[0m #{rails_env}
|
28
|
+
- \033[0;33mRevision:\033[1;37m #{current_revision[0,7]}\033[0m
|
29
|
+
- \033[0;33mRepository:\033[0m #{repository}\n\n}
|
27
30
|
|
28
|
-
|
29
|
-
|
30
|
-
|
31
|
-
|
31
|
+
HoptoadTasks.deploy(:rails_env => rails_env,
|
32
|
+
:scm_revision => current_revision,
|
33
|
+
:scm_repository => repository,
|
34
|
+
:local_username => local_user)
|
35
|
+
end
|
32
36
|
end
|
33
37
|
end
|
34
38
|
|
@@ -30,5 +30,15 @@ namespace :log do
|
|
30
30
|
puts "File can be accessed at /tmp/production.log"
|
31
31
|
end
|
32
32
|
end
|
33
|
+
|
34
|
+
desc "Symlink shared logs to /var/log/rails/<application>-<stage>"
|
35
|
+
task :symlink_shared do
|
36
|
+
# Creates /var/log/rails/<application>-<stage> and migrates any existing logs.
|
37
|
+
run "if ! [ -d /var/log/rails/#{application}-#{stage} ]; then #{sudo} mkdir -p /var/log/rails/#{application}-#{stage} && #{sudo} mv #{shared_path}/log/* /var/log/rails/#{application}-#{stage}/; fi"
|
38
|
+
sudo "rm -rf #{shared_path}/log && ln -fs /var/log/rails/#{application}-#{stage} #{shared_path}/log"
|
39
|
+
sudo "chown -R #{httpd_user}:#{httpd_group} /var/log/rails/#{application}-#{stage}/"
|
40
|
+
end
|
33
41
|
end
|
34
42
|
|
43
|
+
after "stack", "log:symlink_shared"
|
44
|
+
|
@@ -36,8 +36,14 @@ namespace :passenger do
|
|
36
36
|
|
37
37
|
desc "Apache config files: uses special variables @DEPLOY_TO@ @IP_ADDR@ @SERVER_NAME@ @PASSENGER_ROOT@ @RUBY_ROOT@"
|
38
38
|
task :config, :roles => :web do
|
39
|
-
|
40
|
-
|
39
|
+
# You can set the following paths from your deploy.rb file, if needed.
|
40
|
+
unless defined?(httpd_site_conf_path)
|
41
|
+
httpd_site_conf_path = "/etc/httpd/sites-enabled/010-#{application}-#{stage}.conf"
|
42
|
+
end
|
43
|
+
unless defined?(passenger_conf_path)
|
44
|
+
passenger_conf_path = "/etc/httpd/mods-enabled/passenger.conf"
|
45
|
+
end
|
46
|
+
|
41
47
|
if respond_to?(:rvm_ruby_string) # Deploying with RVM
|
42
48
|
ruby_root = "/usr/local/rvm/wrappers/#{rvm_ruby_string}/ruby"
|
43
49
|
passenger_root = "/usr/local/rvm/gems/#{rvm_ruby_string}/gems/passenger-#{passenger_version}"
|
@@ -46,8 +52,12 @@ namespace :passenger do
|
|
46
52
|
passenger_root = capture("pass_path=`gem which phusion_passenger` && echo ${pass_path%/lib/phusion_passenger.rb}")
|
47
53
|
end
|
48
54
|
sed_args = "-e 's%@PASSENGER_ROOT@%#{passenger_root.strip}%g' -e 's%@RUBY_ROOT@%#{ruby_root.strip}%g'"
|
49
|
-
|
50
|
-
sudo "
|
55
|
+
# httpd conf
|
56
|
+
sudo "cp -f #{release_path}/config/httpd-rails.conf #{httpd_site_conf_path}"
|
57
|
+
sudo "sed -i -e 's%@DEPLOY_TO@%#{deploy_to}%g' -e 's%@IP_ADDR@%#{ip_address}%g' -e 's%@SERVER_NAME@%#{site_domain_name}%g' #{httpd_site_conf_path}"
|
58
|
+
# passenger conf
|
59
|
+
sudo "cp -f #{release_path}/config/passenger.conf #{passenger_conf_path}"
|
60
|
+
sudo "sed -i #{sed_args} #{passenger_conf_path}"
|
51
61
|
end
|
52
62
|
end
|
53
63
|
|
@@ -1,7 +1,7 @@
|
|
1
1
|
namespace :deploy do
|
2
2
|
desc "Show currently deployed revision on server."
|
3
3
|
task :revisions, :roles => :app do
|
4
|
-
current, previous, latest = current_revision[0,7], previous_revision[0,7], real_revision[0,7]
|
4
|
+
current, previous, latest = current_revision.to_s[0,7], previous_revision.to_s[0,7], real_revision.to_s[0,7]
|
5
5
|
# Following line 'right-aligns' the branch string.
|
6
6
|
branch_indent = " "*(i=10-branch.size;i<0 ? 0 : i) << branch.capitalize
|
7
7
|
current_is_deployed = current == latest
|
@@ -5,8 +5,8 @@ namespace :rvm do
|
|
5
5
|
desc "Install rvm"
|
6
6
|
task :install, :roles => :web do
|
7
7
|
install_deps
|
8
|
-
|
9
|
-
|
8
|
+
sudo "if ! (which rvm); then bash < <( curl http://rvm.beginrescueend.com/releases/rvm-install-head ); fi", :shell => 'sh'
|
9
|
+
sudo "if ! (rvm list | grep #{rvm_ruby_string}); then rvm install #{rvm_ruby_string}; fi", :shell => 'sh'
|
10
10
|
end
|
11
11
|
|
12
12
|
task :install_deps, :roles => :web do
|
@@ -15,5 +15,5 @@ namespace :rvm do
|
|
15
15
|
|
16
16
|
end
|
17
17
|
|
18
|
-
before "
|
18
|
+
before "stack", "rvm:install"
|
19
19
|
|
@@ -1,58 +1,46 @@
|
|
1
1
|
require File.expand_path('../yum', __FILE__)
|
2
2
|
|
3
|
-
#
|
4
|
-
# Capistrano recipes for cold deployments
|
5
|
-
#
|
6
|
-
# Usage (add the following to your deploy.rb):
|
7
|
-
#
|
8
|
-
# load 'recipes/stack'
|
9
|
-
# set :gems_for_project, ""
|
10
|
-
# ...
|
11
|
-
#
|
12
|
-
# Then just run "cap deploy:cold" and this stack will hook into it
|
13
|
-
#
|
3
|
+
# Installs minimal system software stack. Runs before "cap deploy:cold"
|
14
4
|
|
15
5
|
namespace :stack do
|
16
|
-
|
17
|
-
# Override this if you don't want particular stack items
|
18
6
|
desc "Setup operating system and rails environment"
|
19
7
|
task :default do
|
20
8
|
yum.update
|
21
|
-
yum.install( {:base => packages_for_project}, :stable ) if packages_for_project
|
22
|
-
|
23
|
-
gems
|
24
|
-
|
9
|
+
yum.install( {:base => packages_for_project}, :stable ) if defined?(packages_for_project)
|
10
|
+
install.bundler
|
25
11
|
deploy.setup
|
26
12
|
shared.setup
|
13
|
+
shared.permissions
|
27
14
|
end
|
28
|
-
|
29
|
-
|
30
|
-
|
31
|
-
|
15
|
+
namespace :install do
|
16
|
+
desc "Install Bundler"
|
17
|
+
task :bundler do
|
18
|
+
run "gem install bundler --no-rdoc --no-ri"
|
19
|
+
end
|
32
20
|
end
|
33
|
-
|
34
21
|
end
|
35
22
|
|
36
23
|
namespace 'shared' do
|
37
|
-
|
24
|
+
# This task can be extended by the application via an :after hook.
|
38
25
|
desc "Setup shared directory"
|
39
26
|
task :setup do
|
40
27
|
sudo "mkdir -p #{deploy_to}/shared/config"
|
41
28
|
end
|
42
29
|
|
43
|
-
desc "
|
30
|
+
desc "Set permissions on shared directory"
|
44
31
|
task :permissions do
|
45
|
-
|
46
|
-
|
47
|
-
# during deployments
|
48
|
-
run "if [ -d #{release_path}/ ]; then chown -R apache:apache #{release_path}/; fi"
|
49
|
-
run "if [ -d #{release_path}/ ]; then chmod -R 755 #{release_path}/; fi"
|
32
|
+
sudo "chown -R #{httpd_user}:#{httpd_group} #{deploy_to}/shared/"
|
33
|
+
sudo "chmod -R 755 #{deploy_to}/shared/"
|
50
34
|
end
|
35
|
+
end
|
51
36
|
|
37
|
+
namespace :deploy do
|
38
|
+
desc "Check for project dependencies"
|
39
|
+
task :check_dependencies, :roles => :db, :only => { :primary => true } do
|
40
|
+
sudo "cd #{current_path} && RAILS_ENV=production rake check_dependencies"
|
41
|
+
end
|
52
42
|
end
|
53
43
|
|
54
|
-
|
55
|
-
|
56
|
-
|
57
|
-
before "deploy:cold", "stack"
|
58
|
-
before "deploy:symlink", "shared:permissions"
|
44
|
+
before "deploy:cold", "stack"
|
45
|
+
after "deploy:check", "deploy:check_dependencies"
|
46
|
+
|
@@ -19,7 +19,7 @@ namespace :ts do
|
|
19
19
|
desc "Start sphinx"
|
20
20
|
task :start do
|
21
21
|
run "cd #{current_path} && RAILS_ENV=production rake ts:start"
|
22
|
-
run "chown
|
22
|
+
run "chown #{httpd_user}:#{httpd_group} #{deploy_to}/shared/log/searchd.production.pid"
|
23
23
|
end
|
24
24
|
|
25
25
|
desc "Restart sphinx"
|
@@ -8,6 +8,11 @@ if defined?(Capistrano::Configuration) && Capistrano::Configuration.instance
|
|
8
8
|
Capistrano::Configuration.instance(:must_exist).load do
|
9
9
|
set :rails_root, Dir.pwd # For tasks that need the root directory
|
10
10
|
|
11
|
+
# Load defaults unless explicitly told not to.
|
12
|
+
unless $no_default
|
13
|
+
load File.join(File.dirname(__FILE__), "crossroads_capistrano/recipes/defaults.rb")
|
14
|
+
end
|
15
|
+
|
11
16
|
def load_crossroads_recipes(recipes)
|
12
17
|
if recipes == :all
|
13
18
|
# Load all available crossroads_recipes.
|
metadata
CHANGED
@@ -1,36 +1,26 @@
|
|
1
|
-
--- !ruby/object:Gem::Specification
|
1
|
+
--- !ruby/object:Gem::Specification
|
2
2
|
name: crossroads_capistrano
|
3
|
-
version: !ruby/object:Gem::Version
|
4
|
-
|
5
|
-
prerelease:
|
6
|
-
segments:
|
7
|
-
- 1
|
8
|
-
- 3
|
9
|
-
- 61
|
10
|
-
version: 1.3.61
|
3
|
+
version: !ruby/object:Gem::Version
|
4
|
+
version: 1.4.0
|
5
|
+
prerelease:
|
11
6
|
platform: ruby
|
12
|
-
authors:
|
7
|
+
authors:
|
13
8
|
- Steve Kenworthy
|
14
9
|
- Ben Tillman
|
15
10
|
- Nathan Broadbent
|
16
11
|
autorequire:
|
17
12
|
bindir: bin
|
18
13
|
cert_chain: []
|
19
|
-
|
20
|
-
date: 2011-05-20 00:00:00 +08:00
|
14
|
+
date: 2011-05-20 00:00:00.000000000 +08:00
|
21
15
|
default_executable:
|
22
16
|
dependencies: []
|
23
|
-
|
24
17
|
description: A Crossroads Foundation collection of generic capistrano recipes.
|
25
|
-
email:
|
18
|
+
email:
|
26
19
|
- it_dept@crossroads.org.hk
|
27
20
|
executables: []
|
28
|
-
|
29
21
|
extensions: []
|
30
|
-
|
31
22
|
extra_rdoc_files: []
|
32
|
-
|
33
|
-
files:
|
23
|
+
files:
|
34
24
|
- .gitignore
|
35
25
|
- Gemfile
|
36
26
|
- README.textile
|
@@ -38,6 +28,7 @@ files:
|
|
38
28
|
- crossroads_capistrano.gemspec
|
39
29
|
- lib/crossroads_capistrano.rb
|
40
30
|
- lib/crossroads_capistrano/recipes/cache.rb
|
31
|
+
- lib/crossroads_capistrano/recipes/defaults.rb
|
41
32
|
- lib/crossroads_capistrano/recipes/delayed_job.rb
|
42
33
|
- lib/crossroads_capistrano/recipes/deploy_permissions.rb
|
43
34
|
- lib/crossroads_capistrano/recipes/hoptoad.rb
|
@@ -49,6 +40,7 @@ files:
|
|
49
40
|
- lib/crossroads_capistrano/recipes/prompt.rb
|
50
41
|
- lib/crossroads_capistrano/recipes/revisions.rb
|
51
42
|
- lib/crossroads_capistrano/recipes/rvm.rb
|
43
|
+
- lib/crossroads_capistrano/recipes/shared_config.rb
|
52
44
|
- lib/crossroads_capistrano/recipes/stack.rb
|
53
45
|
- lib/crossroads_capistrano/recipes/thinking_sphinx.rb
|
54
46
|
- lib/crossroads_capistrano/recipes/whenever.rb
|
@@ -56,36 +48,26 @@ files:
|
|
56
48
|
has_rdoc: true
|
57
49
|
homepage: http://www.crossroads.org.hk
|
58
50
|
licenses: []
|
59
|
-
|
60
51
|
post_install_message:
|
61
52
|
rdoc_options: []
|
62
|
-
|
63
|
-
require_paths:
|
53
|
+
require_paths:
|
64
54
|
- lib
|
65
|
-
required_ruby_version: !ruby/object:Gem::Requirement
|
55
|
+
required_ruby_version: !ruby/object:Gem::Requirement
|
66
56
|
none: false
|
67
|
-
requirements:
|
68
|
-
- -
|
69
|
-
- !ruby/object:Gem::Version
|
70
|
-
|
71
|
-
|
72
|
-
- 0
|
73
|
-
version: "0"
|
74
|
-
required_rubygems_version: !ruby/object:Gem::Requirement
|
57
|
+
requirements:
|
58
|
+
- - ! '>='
|
59
|
+
- !ruby/object:Gem::Version
|
60
|
+
version: '0'
|
61
|
+
required_rubygems_version: !ruby/object:Gem::Requirement
|
75
62
|
none: false
|
76
|
-
requirements:
|
77
|
-
- -
|
78
|
-
- !ruby/object:Gem::Version
|
79
|
-
|
80
|
-
segments:
|
81
|
-
- 0
|
82
|
-
version: "0"
|
63
|
+
requirements:
|
64
|
+
- - ! '>='
|
65
|
+
- !ruby/object:Gem::Version
|
66
|
+
version: '0'
|
83
67
|
requirements: []
|
84
|
-
|
85
68
|
rubyforge_project: crossroads_capistrano
|
86
|
-
rubygems_version: 1.
|
69
|
+
rubygems_version: 1.6.2
|
87
70
|
signing_key:
|
88
71
|
specification_version: 3
|
89
72
|
summary: Crossroads capistrano recipes
|
90
73
|
test_files: []
|
91
|
-
|