capistrano-ash 0.0.11 → 0.0.12

Sign up to get free protection for your applications and to get access to all the features.
data/CHANGELOG.rdoc CHANGED
@@ -1,3 +1,7 @@
1
+ == 0.0.11 (December 8, 2010)
2
+
3
+ * Fixed some of my "uh-oh" moments and debugged the ash/base.rb and ash/zend_doctrine.rb files
4
+
1
5
  == 0.0.5 (December 8, 2010)
2
6
 
3
7
  * Defined default stages and set the :default_stage variable to "staging"
data/VERSION CHANGED
@@ -1 +1 @@
1
- 0.0.11
1
+ 0.0.12
@@ -5,11 +5,11 @@
5
5
 
6
6
  Gem::Specification.new do |s|
7
7
  s.name = %q{capistrano-ash}
8
- s.version = "0.0.11"
8
+ s.version = "0.0.12"
9
9
 
10
10
  s.required_rubygems_version = Gem::Requirement.new(">= 0") if s.respond_to? :required_rubygems_version=
11
11
  s.authors = ["August Ash"]
12
- s.date = %q{2010-12-08}
12
+ s.date = %q{2010-12-15}
13
13
  s.description = %q{August Ash recipes for Capistrano}
14
14
  s.email = %q{jake@augustash.com}
15
15
  s.extra_rdoc_files = [
@@ -24,6 +24,7 @@ Gem::Specification.new do |s|
24
24
  "lib/ash/base.rb",
25
25
  "lib/ash/common.rb",
26
26
  "lib/ash/drupal.rb",
27
+ "lib/ash/magento.rb",
27
28
  "lib/ash/zend_doctrine.rb"
28
29
  ]
29
30
  s.homepage = %q{https://github.com/augustash/capistrano-ash}
data/lib/ash/base.rb CHANGED
@@ -1,51 +1,155 @@
1
+ # Capistrano2 differentiator
2
+ load 'deploy' if respond_to?(:namespace)
3
+ Dir['vendor/plugins/*/recipes/*.rb'].each { |plugin| load(plugin) }
4
+
1
5
  # Required gems/libraries
2
6
  require 'rubygems'
3
7
  require 'railsless-deploy'
4
8
  require 'ash/common'
5
9
  require 'capistrano/ext/multistage'
6
10
 
11
+ # Bootstrap Capistrano instance
7
12
  configuration = Capistrano::Configuration.respond_to?(:instance) ?
8
13
  Capistrano::Configuration.instance(:must_exist) :
9
14
  Capistrano.configuration(:must_exist)
10
15
 
11
16
  configuration.load do
12
17
 
13
- # set default stages
18
+ # Set default stages
14
19
  set :stages, %w(staging production)
15
20
  set :default_stge, "staging"
16
21
 
17
22
  # --------------------------------------------
18
- # Setting defaults
23
+ # Task chains
19
24
  # --------------------------------------------
20
- set :copy_exclude, [".svn", ".DS_Store", "*.sample", "LICENSE*", "Capfile", "config", "REVISION"]
21
- set :deploy_via, :remote_cache
25
+ after "deploy:setup", "deploy:setup_shared"
26
+ after "deploy", "deploy:cleanup"
27
+
28
+ # --------------------------------------------
29
+ # Default variables
30
+ # --------------------------------------------
31
+ # SSH
32
+ set :user, proc{text_prompt("SSH username: ")}
33
+ set :password, proc{Capistrano::CLI.password_prompt("SSH password for '#{user}':")}
34
+
35
+ # Database
36
+ set :dbuser, proc{text_prompt("Database username: ")}
37
+ set :dbpass, proc{Capistrano::CLI.password_prompt("Database password for '#{dbuser}':")}
38
+ set :dbname, proc{text_prompt("Database name: ")}
39
+
40
+ # Source Control
22
41
  set :group_writable, false
23
42
  set :use_sudo, false
24
43
  set :scm, :subversion
25
44
  set :scm_verbose, true
45
+ set :scm_username, proc{text_prompt("Subversion username: ")}
46
+ set :scm_password, proc{Capistrano::CLI.password_prompt("Subversion password for '#{scm_username}': ")}
47
+ set :keep_releases, 3
48
+ set :deploy_via, :remote_cache
49
+ set :copy_strategy, :checkout
50
+ set :copy_compression, :bz2
51
+ set :copy_exclude, [".svn", ".DS_Store", "*.sample", "LICENSE*", "Capfile",
52
+ "config", "*.rb", "*.sql", "nbproject", "_template"]
53
+ # phpMyAdmin version
54
+ set :pma_version, "3.3.8"
26
55
 
27
- # show password requests on windows (http://weblog.jamisbuck.org/2007/10/14/capistrano-2-1)
56
+ # show password requests on windows
57
+ # (http://weblog.jamisbuck.org/2007/10/14/capistrano-2-1)
28
58
  default_run_options[:pty] = true
29
59
 
30
60
  # --------------------------------------------
31
- # Ash methods
61
+ # Overloaded tasks
62
+ # --------------------------------------------
63
+ namespace :deploy do
64
+ desc "Setup shared application directories and permissions after initial setup"
65
+ task :setup_shared do
66
+ puts "STUB: Setup"
67
+ end
68
+ end
69
+
70
+ # --------------------------------------------
71
+ # Ash tasks
32
72
  # --------------------------------------------
33
73
  namespace :ash do
34
- desc "Fix the permissions on Ash servers"
74
+ desc "Set standard permissions for Ash servers"
35
75
  task :fixperms, :except => { :no_release => true } do
36
76
  # chmod the files and directories.
37
- run "find #{latest_release} -type d -exec chmod 755 {} \\;"
38
- run "find #{latest_release} -type f -exec chmod 644 {} \\;"
77
+ sudo "find #{latest_release} -type d -exec chmod 755 {} \\;"
78
+ sudo "find #{latest_release} -type f -exec chmod 644 {} \\;"
39
79
  end
40
80
 
41
- desc "Task for to test that Capistrano is working"
81
+ desc "Test: Task used to verify Capistrano is working. Prints operating system name."
42
82
  task :uname do
43
83
  run "uname -a"
44
84
  end
45
85
 
46
- desc "Print environment of Capistrano user"
86
+ desc "Test: Task used to verify Capistrano is working. Prints environment of Capistrano user."
47
87
  task :getpath do
48
88
  run "echo $PATH"
49
89
  end
50
90
  end
51
- end
91
+
92
+ # --------------------------------------------
93
+ # PHP tasks
94
+ # --------------------------------------------
95
+ namespace :php do
96
+ namespace :apc do
97
+ desc "Disable the APC administrative panel"
98
+ task :disable, :except => { :no_release => true } do
99
+ run "rm #{current_path}/apc.php"
100
+ end
101
+
102
+ desc "Enable the APC administrative panel"
103
+ task :enable, :except => { :no_release => true } do
104
+ run "ln -s /usr/local/lib/php/apc.php #{current_path}/apc.php"
105
+ end
106
+ end
107
+ end
108
+
109
+ # --------------------------------------------
110
+ # phpMyAdmin tasks
111
+ # --------------------------------------------
112
+ namespace :pma do
113
+ desc "Disable the phpMyAdmin utility"
114
+ task :disable, :roles => :web, :except => { :no_release => true } do
115
+ run "rm -f #{current_path}/pma"
116
+ end
117
+
118
+ desc "Enable the phpMyAdmin utility"
119
+ task :enable, :roles => :web, :except => { :no_release => true } do
120
+ run "ln -s #{shared_path}/pma #{current_path}/pma"
121
+ end
122
+
123
+ desc "Install phpMyAdmin utility"
124
+ task :install, :roles => :web do
125
+ # fetch PMA
126
+ run "wget -O #{shared_path}/pma.tar.gz http://downloads.sourceforge.net/project/phpmyadmin/phpMyAdmin/#{pma_version}/phpMyAdmin-#{pma_version}-english.tar.gz"
127
+ # decompress and install
128
+ run "tar -zxf #{shared_path}/pma.tar.gz -C #{shared_path}"
129
+ run "mv #{shared_path}/phpMyAdmin-#{pma_version}-english/ #{shared_path}/pma/"
130
+ run "rm -f #{shared_path}/pma.tar.gz"
131
+ end
132
+ end
133
+
134
+ # --------------------------------------------
135
+ # Backup tasks
136
+ # --------------------------------------------
137
+ namespace :backup do
138
+ desc "Perform a backup of web and database files"
139
+ task :default do
140
+ web
141
+ db
142
+ end
143
+
144
+ desc "Perform a backup of web files"
145
+ task :web, :roles => :web do
146
+ puts "STUB: Backing up web server"
147
+ end
148
+
149
+ desc "Perform a backup of database files"
150
+ task :db, :roles => :db do
151
+ puts "STUB: Backing up db server"
152
+ end
153
+ end
154
+
155
+ end
data/lib/ash/common.rb CHANGED
@@ -8,3 +8,10 @@ def _cset(name, *args, &block)
8
8
  set(name, *args, &block)
9
9
  end
10
10
  end
11
+
12
+ # Prompts user entry
13
+ # Params:
14
+ # +prompt+
15
+ def text_prompt(prompt="Value: ")
16
+ ui.ask(prompt) { |q| q.echo = true }
17
+ end
data/lib/ash/drupal.rb CHANGED
@@ -10,12 +10,15 @@ configuration.load do
10
10
  # --------------------------------------------
11
11
  # Setting defaults
12
12
  # --------------------------------------------
13
- _cset :multisites, {"default" => "default"}
13
+ proc{_cset( :multisites, {"default" => "#{application}"} )}
14
+ set :drush_bin, "drush"
14
15
 
15
16
  # --------------------------------------------
16
17
  # Calling our Methods
17
18
  # --------------------------------------------
18
19
  after "deploy:setup", "deploy:setup_shared"
20
+ after "deploy:finalize_update", "ash:fixperms"
21
+ after "ash:fixperms", "drupal:protect"
19
22
  after "deploy:symlink", "drupal:symlink"
20
23
  after "deploy", "drupal:clearcache"
21
24
  after "deploy", "deploy:cleanup"
@@ -53,14 +56,14 @@ namespace :deploy do
53
56
  desc "Disable the application and show a message screen"
54
57
  task :disable do
55
58
  multisites.each_pair do |folder, url|
56
- run "/usr/local/bin/drush -l #{url} -r #{latest_release} vset --yes site_offline 1"
59
+ run "#{drush_bin} -l #{url} -r #{latest_release} vset --yes site_offline 1"
57
60
  end
58
61
  end
59
62
 
60
63
  desc "Enable the application and remove the message screen"
61
64
  task :enable do
62
65
  multisites.each_pair do |folder, url|
63
- run "/usr/local/bin/drush -l #{url} -r #{latest_release} vdel --yes site_offline"
66
+ run "#{drush_bin} -l #{url} -r #{latest_release} vdel --yes site_offline"
64
67
  end
65
68
  end
66
69
  end
@@ -75,23 +78,31 @@ namespace :drupal do
75
78
  multisites.each_pair do |folder, url|
76
79
  run "ln -nfs #{shared_path}/#{url}/files #{current_release}/sites/#{url}/files"
77
80
  run "ln -nfs #{latest_release}/sites/#{url}/settings.php.#{stage} #{latest_release}/sites/#{url}/settings.php"
78
- run "/usr/local/bin/drush -l #{url} -r #{current_path} vset --yes file_directory_path sites/#{url}/files"
81
+ run "#{drush_bin} -l #{url} -r #{current_path} vset --yes file_directory_path sites/#{url}/files"
79
82
  end
80
83
  end
81
84
 
82
85
  desc "Replace local database paths with remote paths"
83
86
  task :updatedb, :except => { :no_release => true } do
84
87
  multisites.each_pair do |folder, url|
85
- run "/usr/local/bin/drush -l #{url} -r #{current_path} sqlq \"UPDATE {files} SET filepath = REPLACE(filepath,'sites/#{folder}/files','sites/#{url}/files');\""
88
+ run "#{drush_bin} -l #{url} -r #{current_path} sqlq \"UPDATE {files} SET filepath = REPLACE(filepath,'sites/#{folder}/files','sites/#{url}/files');\""
86
89
  end
87
90
  end
88
91
 
89
92
  desc "Clear all Drupal cache"
90
93
  task :clearcache, :except => { :no_release => true } do
91
94
  multisites.each_pair do |folder, url|
92
- run "/usr/local/bin/drush -l #{url} -r #{current_path} cache-clear all"
95
+ run "#{drush_bin} -l #{url} -r #{current_path} cache-clear all"
93
96
  end
94
97
  end
98
+
99
+ desc "Protect system files"
100
+ task :protect, :except => { :no_release => true } do
101
+ multisites.each_pair do |folder, url|
102
+ run "chmod 644 #{latest_release}/sites/#{url}/settings.php*"
103
+ end
104
+ end
105
+
95
106
  end
96
107
 
97
108
  end
@@ -0,0 +1,107 @@
1
+ # Required base libraries
2
+ require 'ash/base'
3
+
4
+ # Bootstrap Capistrano instance
5
+ configuration = Capistrano::Configuration.respond_to?(:instance) ?
6
+ Capistrano::Configuration.instance(:must_exist) :
7
+ Capistrano.configuration(:must_exist)
8
+
9
+ configuration.load do
10
+ # --------------------------------------------
11
+ # Task chains
12
+ # --------------------------------------------
13
+ after "deploy:setup_shared", "pma:install"
14
+ after "deploy:finalize_update", "magento:activate_config"
15
+ after "deploy:symlink", "magento:symlink"
16
+ after "deploy", "magento:purge_cache"
17
+
18
+ # --------------------------------------------
19
+ # Overloaded tasks
20
+ # --------------------------------------------
21
+ namespace :deploy do
22
+ desc "Setup shared application directories and permissions after initial setup"
23
+ task :setup_shared do
24
+ # remove Capistrano specific directories
25
+ run "rm -Rf #{shared_path}/log"
26
+ run "rm -Rf #{shared_path}/pids"
27
+ run "rm -Rf #{shared_path}/system"
28
+
29
+ # create shared directories
30
+ run "mkdir -p #{shared_path}/includes"
31
+ run "mkdir -p #{shared_path}/media"
32
+ run "mkdir -p #{shared_path}/sitemap"
33
+ run "mkdir -p #{shared_path}/var"
34
+
35
+ # set correct permissions
36
+ run "chmod 777 #{shared_path}/*"
37
+ end
38
+
39
+ desc "[internal] Touches up the released code. This is called by update_code after the basic deploy finishes."
40
+ task :finalize_update, :except => { :no_release => true } do
41
+ # synchronize media directory with shared data
42
+ sudo "rsync -rltDvzog #{latest_release}/media/ #{shared_path}/media/"
43
+ sudo "chmod -R 777 #{shared_path}/media/"
44
+
45
+ # remove directories that will be shared
46
+ run "rm -Rf #{latest_release}/includes"
47
+ run "rm -Rf #{latest_release}/media"
48
+ run "rm -Rf #{latest_release}/sitemap"
49
+ run "rm -Rf #{latest_release}/var"
50
+
51
+ # set the file and directory permissions
52
+ ash.fixperms
53
+ run "chmod 400 #{latest_release}/pear"
54
+ run "chmod o+w #{latest_release}/app/etc"
55
+ end
56
+
57
+ namespace :web do
58
+ desc "Disable the application and show a message screen"
59
+ task :disable, :except => { :no_release => true } do
60
+ run "touch #{current_path}/maintenance.flag"
61
+ end
62
+
63
+ desc "Enable the application and remove the message screen"
64
+ task :enable, :except => { :no_release => true } do
65
+ run "rm #{current_path}/maintenance.flag"
66
+ end
67
+ end
68
+ end
69
+
70
+ # --------------------------------------------
71
+ # Magento specific tasks
72
+ # --------------------------------------------
73
+ namespace :magento do
74
+ desc "Set appropriate configuration values for the stage"
75
+ task :activate_config, :except => { :no_release => true } do
76
+ run "cp -f #{latest_release}/app/etc/local.xml.#{stage} #{latest_release}/app/etc/local.xml"
77
+ end
78
+
79
+ desc "Symlink shared directories"
80
+ task :symlink, :except => { :no_release => true } do
81
+ run "ln -nfs #{shared_path}/includes #{current_release}/includes"
82
+ run "ln -nfs #{shared_path}/media #{current_release}/media"
83
+ run "ln -nfs #{shared_path}/sitemap #{current_release}/sitemap"
84
+ run "ln -nfs #{shared_path}/var #{current_release}/var"
85
+ end
86
+
87
+ desc "Purge Magento cache directory"
88
+ task :purge_cache, :except => { :no_release => true } do
89
+ sudo "rm -Rf #{shared_path}/var/cache/*"
90
+ end
91
+
92
+ desc "Watch Magento system log"
93
+ task :watch_logs, :except => { :no_release => true } do
94
+ stream("tail -f #{shared_path}/var/log/system.log")
95
+ end
96
+
97
+ desc "Watch Magento exception log"
98
+ task :watch_exceptions, :except => { :no_release => true } do
99
+ stream("tail -f #{shared_path}/var/log/exception.log")
100
+ end
101
+ end
102
+
103
+ # --------------------------------------------
104
+ # Custom tasks
105
+ # --------------------------------------------
106
+
107
+ end
metadata CHANGED
@@ -5,8 +5,8 @@ version: !ruby/object:Gem::Version
5
5
  segments:
6
6
  - 0
7
7
  - 0
8
- - 11
9
- version: 0.0.11
8
+ - 12
9
+ version: 0.0.12
10
10
  platform: ruby
11
11
  authors:
12
12
  - August Ash
@@ -14,7 +14,7 @@ autorequire:
14
14
  bindir: bin
15
15
  cert_chain: []
16
16
 
17
- date: 2010-12-08 00:00:00 -06:00
17
+ date: 2010-12-15 00:00:00 -06:00
18
18
  default_executable:
19
19
  dependencies: []
20
20
 
@@ -35,6 +35,7 @@ files:
35
35
  - lib/ash/base.rb
36
36
  - lib/ash/common.rb
37
37
  - lib/ash/drupal.rb
38
+ - lib/ash/magento.rb
38
39
  - lib/ash/zend_doctrine.rb
39
40
  has_rdoc: true
40
41
  homepage: https://github.com/augustash/capistrano-ash