capistrano-ash 0.0.19 → 1.0.0

Sign up to get free protection for your applications and to get access to all the features.
data/CHANGELOG.rdoc CHANGED
@@ -1,3 +1,17 @@
1
+ == 1.0.0
2
+ * Added the drupal:htaccess task for copying distributed .htaccess files
3
+ * Added example Drupal Capfile and staging/production deployment files
4
+ * Version bump to 1.0
5
+
6
+ == 0.0.20
7
+
8
+ * Added AAI-hosted Magento script
9
+ * Added "setup_local" task for Magento script
10
+
11
+ == 0.0.19
12
+
13
+ * Added the backup:cleanup method to remove old backups from the servers. You can over-ride the number of kept backups with the :keep_backups variable (default is 10). Warning: this will permanently remove the backups from the server solely based on the timestamp.
14
+
1
15
  == 0.0.16
2
16
 
3
17
  * Removed the extra 's' from the callback section that was supposed to call deploy:setup_backup
data/README.textile CHANGED
@@ -1,3 +1,7 @@
1
+ h2. Deploying Magento
2
+
3
+ Check the "Wiki":https://github.com/augustash/capistrano-ash/wiki for detailed installation instructions.
4
+
1
5
  h2. Deploying Drupal example
2
6
 
3
7
  The capistrano/ash/drupal library takes a hash of Drupal multisites in the following format.
@@ -6,6 +10,97 @@ The capistrano/ash/drupal library takes a hash of Drupal multisites in the follo
6
10
 
7
11
  where each key is a folder in your @sites@ directory and each value is the URL of the multisite. If you are not using multisites, just exclude the @:multisites@ variable definition.
8
12
 
13
+
14
+ h3. Capfile
15
+
16
+ <pre>
17
+ <code>
18
+ # Capfile
19
+ load 'deploy' if respond_to?(:namespace) # cap2 differentiator
20
+
21
+ # --------------------------------------------
22
+ # :application HAS TO BE DEFINED BEFORE
23
+ # REQUIRING 'ash/drupal' LIBRARY
24
+ # --------------------------------------------
25
+ set :application, "bestappever.com"
26
+ set :stages, %w(staging production)
27
+
28
+ # --------------------------------------------
29
+ # Define required Gems/libraries
30
+ # --------------------------------------------
31
+ require 'ash/drupal'
32
+
33
+ # --------------------------------------------
34
+ # Setting defaults
35
+ # --------------------------------------------
36
+ # IP-address or host's servername
37
+ role :app, "bestappever.com"
38
+ role :web, "bestappever.com"
39
+ role :db, "bestappever.com", :primary => true
40
+
41
+ # VCS information.
42
+ set :repository, "https://svn.example.com/REPO/trunk"
43
+ set :scm_username, "SVN_USER"
44
+ set :scm_password, proc{Capistrano::CLI.password_prompt("Subversion password for '#{scm_username}':")}
45
+
46
+ # SSH login credentials
47
+ set :user, "SSH_USER"
48
+ set :password, proc{Capistrano::CLI.password_prompt("SSH password for '#{user}':")}
49
+
50
+ # Deploy to file path
51
+ set(:deploy_to) { "/var/www/#{application}/#{stage}" }
52
+
53
+ # Database credentials
54
+ set :dbuser, "DB_USER_NAME"
55
+
56
+ # Define which files or directories you want to exclude from being backed up
57
+ set(:backup_exclude) { [ "var/" ] }
58
+
59
+
60
+ # --------------------------------------------
61
+ # Drupal Multi-Sites
62
+ # --------------------------------------------
63
+ # Setting which folder in the sites directory to use
64
+ set :multisites, {
65
+ 'bestapp' => 'bestappever.com',
66
+ }
67
+
68
+
69
+ # --------------------------------------------
70
+ # Callbacks - Set Before/After Precedence
71
+ # --------------------------------------------
72
+ before "deploy:update_code", "deploy:setup_backup"
73
+ after "deploy:setup_backup", "backup"
74
+ </code>
75
+ </pre>
76
+
77
+ h3. config/deploy/staging.rb
78
+
79
+ <pre>
80
+ <code>
81
+ # config/deploy/staging.rb
82
+ # Database Name
83
+ set :dbname, "DB_NAME"
84
+
85
+ # Backups Path (/var/www/#{application}/staging/backups)
86
+ set :backups_path, "#{deploy_to}/backups"
87
+ </code>
88
+ </pre>
89
+
90
+ h3. config/deploy/production.rb
91
+
92
+ <pre>
93
+ <code>
94
+ # config/deploy/production.rb
95
+ # Database Name
96
+ set :dbname, "DB_NAME"
97
+
98
+ # Backups Path (/var/www/#{application}/production/backups)
99
+ set :backups_path, "#{deploy_to}/backups"
100
+ </code>
101
+ </pre>
102
+
103
+
9
104
  h2. Deploying Zend or Zend/Doctrine example
10
105
 
11
106
  h3. Capfile
@@ -16,7 +111,7 @@ h3. Capfile
16
111
  load 'deploy' if respond_to?(:namespace) # cap2 differentiator
17
112
 
18
113
  # --------------------------------------------
19
- # :applicaiton HAS TO BE DEFINED BEFORE
114
+ # :application HAS TO BE DEFINED BEFORE
20
115
  # REQUIRING 'ash/zend_doctrine' LIBRARY
21
116
  # --------------------------------------------
22
117
  set :application, "BEST_APP_EVER"
@@ -84,6 +179,13 @@ h3. config/deploy/staging.rb
84
179
  <pre>
85
180
  <code>
86
181
  # config/deploy/staging.rb
182
+
183
+ # Deploy site using Capistrano
184
+ #
185
+ # Usage:
186
+ # cap staging deploy:setup
187
+ # cap staging deploy
188
+
87
189
  # Database Name
88
190
  set :dbname, "DB_NAME"
89
191
 
@@ -97,6 +199,13 @@ h3. config/deploy/production.rb
97
199
  <pre>
98
200
  <code>
99
201
  # config/deploy/production.rb
202
+
203
+ # Deploy site using Capistrano
204
+ #
205
+ # Usage:
206
+ # cap production deploy:setup
207
+ # cap production deploy
208
+
100
209
  # Database Name
101
210
  set :dbname, "DB_NAME"
102
211
 
@@ -104,3 +213,95 @@ h3. config/deploy/production.rb
104
213
  set :backups_path, "#{deploy_to}/backups"
105
214
  </code>
106
215
  </pre>
216
+
217
+ h2. WordPress example
218
+
219
+ h3. Capfile
220
+
221
+ <pre>
222
+ <code>
223
+ # Capfile
224
+ load 'deploy' if respond_to?(:namespace) # cap2 differentiator
225
+
226
+ # --------------------------------------------
227
+ # :application HAS TO BE DEFINED BEFORE
228
+ # REQUIRING 'ash/wordpress' LIBRARY
229
+ # --------------------------------------------
230
+ set :application, "WP_EXAMPLE.com"
231
+
232
+ # --------------------------------------------
233
+ # Define required Gems/libraries
234
+ # --------------------------------------------
235
+ require 'ash/wordpress'
236
+
237
+ # --------------------------------------------
238
+ # Setting defaults
239
+ # --------------------------------------------
240
+ # IP-address or host's servername
241
+ role :app, "wpexample.com"
242
+ role :web, "wpexample.com"
243
+ role :db, "wpexample.com", :primary => true
244
+
245
+ # VCS information.
246
+ set :repository, "https://svn.example.com/REPO/trunk"
247
+ set :scm_username, "SVN_USER"
248
+ set :scm_password, proc{Capistrano::CLI.password_prompt("Subversion password for '#{scm_username}':")}
249
+
250
+ # SSH login credentials
251
+ set :user, "SSH_USER"
252
+ set :password, proc{Capistrano::CLI.password_prompt("SSH password for '#{user}':")}
253
+
254
+ # Deploy to file path
255
+ set(:deploy_to) { "/home/CLIENT_CODE/#{application}/#{stage}" }
256
+
257
+ # Database credentials
258
+ set :dbuser, "DB_USER"
259
+
260
+ # Set Excluded directories/files (relative to the application's root path)
261
+ set(:backup_exclude) { [ "wp-content/cache" ] }
262
+
263
+ # --------------------------------------------
264
+ # Application Specific Methods
265
+ # --------------------------------------------
266
+ namespace :app do
267
+ desc "Removes any additional unnecessary files or directories after deploy:finalize_update"
268
+ task :finalize_update, :except => { :no_release => true } do
269
+ logger.debug "Removing additional files"
270
+ run "rm -Rf #{latest_release}/htaccess.dist"
271
+ end
272
+ end
273
+
274
+ # --------------------------------------------
275
+ # Callbacks
276
+ # --------------------------------------------
277
+ before "deploy:update_code", "deploy:setup_backup"
278
+ after "deploy:setup_backup", "backup"
279
+ after "deploy:finalize_update", "app:finalize_update"
280
+ </code>
281
+ </pre>
282
+
283
+ h3. config/deploy/staging.rb
284
+
285
+ <pre>
286
+ <code>
287
+ # config/deploy/staging.rb
288
+ # Database Name
289
+ set :dbname, "DB_NAME"
290
+
291
+ # Backups Path (/home/CLIENT_CODE/#{application}/staging/backups)
292
+ set :backups_path, "#{deploy_to}/backups"
293
+ </code>
294
+ </pre>
295
+
296
+ h3. config/deploy/production.rb
297
+
298
+ <pre>
299
+ <code>
300
+ # config/deploy/production.rb
301
+ # Database Name
302
+ set :dbname, "DB_NAME"
303
+
304
+ # Backups Path (/home/CLIENT_CODE/#{application}/production/backups)
305
+ set :backups_path, "#{deploy_to}/backups"
306
+ </code>
307
+ </pre>
data/VERSION CHANGED
@@ -1 +1 @@
1
- 0.0.19
1
+ 1.0.0
@@ -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.18"
8
+ s.version = "1.0.0"
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-29}
12
+ s.date = %q{2011-05-17}
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,17 +24,17 @@ 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/hosted_magento.rb",
27
28
  "lib/ash/magento.rb",
28
29
  "lib/ash/wordpress.rb",
29
30
  "lib/ash/zend_doctrine.rb"
30
31
  ]
31
32
  s.homepage = %q{https://github.com/augustash/capistrano-ash}
32
33
  s.require_paths = ["lib"]
33
- s.rubygems_version = %q{1.3.7}
34
+ s.rubygems_version = %q{1.6.2}
34
35
  s.summary = %q{Useful task libraries for August Ash recipes for Capistrano}
35
36
 
36
37
  if s.respond_to? :specification_version then
37
- current_version = Gem::Specification::CURRENT_SPECIFICATION_VERSION
38
38
  s.specification_version = 3
39
39
 
40
40
  if Gem::Version.new(Gem::VERSION) >= Gem::Version.new('1.2.0') then
data/lib/ash/base.rb CHANGED
@@ -50,7 +50,7 @@ configuration.load do
50
50
  set :copy_strategy, :checkout
51
51
  set :copy_compression, :bz2
52
52
  set :copy_exclude, [".svn", ".DS_Store", "*.sample", "LICENSE*", "Capfile",
53
- "config", "*.rb", "*.sql", "nbproject", "_template"]
53
+ "RELEASE*", "config", "*.rb", "*.sql", "nbproject", "_template"]
54
54
 
55
55
  # phpMyAdmin version
56
56
  set :pma_version, "3.3.8"
data/lib/ash/drupal.rb CHANGED
@@ -7,115 +7,119 @@ configuration = Capistrano::Configuration.respond_to?(:instance) ?
7
7
 
8
8
  configuration.load do
9
9
 
10
- # --------------------------------------------
11
- # Setting defaults
12
- # --------------------------------------------
13
- proc{_cset( :multisites, {"default" => "#{application}"} )}
14
- set :drush_bin, "drush"
10
+ # --------------------------------------------
11
+ # Setting defaults
12
+ # --------------------------------------------
13
+ proc{_cset( :multisites, {"default" => "#{application}"} )}
14
+ set :drush_bin, "drush"
15
15
 
16
- # --------------------------------------------
17
- # Calling our Methods
18
- # --------------------------------------------
19
- after "deploy:setup", "deploy:setup_shared"
20
- after "deploy:finalize_update", "ash:fixperms"
21
- after "ash:fixperms", "drupal:protect"
22
- after "deploy:symlink", "drupal:symlink"
23
- after "deploy", "drupal:clearcache"
24
- after "deploy", "deploy:cleanup"
16
+ # --------------------------------------------
17
+ # Calling our Methods
18
+ # --------------------------------------------
19
+ after "deploy:setup", "deploy:setup_shared"
20
+ after "deploy:finalize_update", "ash:fixperms"
21
+ after "ash:fixperms", "drupal:protect"
22
+ after "deploy:symlink", "drupal:symlink"
23
+ after "deploy", "drupal:clearcache"
24
+ after "deploy", "drupal:htaccess"
25
+ after "deploy", "deploy:cleanup"
25
26
 
26
- # --------------------------------------------
27
- # Overloaded Methods
28
- # --------------------------------------------
29
- namespace :deploy do
27
+ # --------------------------------------------
28
+ # Overloaded Methods
29
+ # --------------------------------------------
30
+ namespace :deploy do
30
31
  desc "Setup shared application directories and permissions after initial setup"
31
32
  task :setup_shared, :roles => :web do
32
- # remove Capistrano specific directories
33
- run "rm -Rf #{shared_path}/log"
34
- run "rm -Rf #{shared_path}/pids"
35
- run "rm -Rf #{shared_path}/system"
33
+ # remove Capistrano specific directories
34
+ run "rm -Rf #{shared_path}/log"
35
+ run "rm -Rf #{shared_path}/pids"
36
+ run "rm -Rf #{shared_path}/system"
36
37
 
37
- # create shared directories
38
- multisites.each_pair do |folder, url|
39
- run "mkdir -p #{shared_path}/#{url}/files"
40
- end
38
+ # create shared directories
39
+ multisites.each_pair do |folder, url|
40
+ run "mkdir -p #{shared_path}/#{url}/files"
41
+ end
41
42
 
42
- # set correct permissions
43
- run "chmod -R 777 #{shared_path}/*"
43
+ # set correct permissions
44
+ run "chmod -R 777 #{shared_path}/*"
44
45
  end
45
46
 
46
47
  desc "[internal] Touches up the released code. This is called by update_code after the basic deploy finishes."
47
48
  task :finalize_update, :except => { :no_release => true } do
48
- # remove shared directories
49
- multisites.each_pair do |folder, url|
50
- run "mv #{latest_release}/sites/#{folder} #{latest_release}/sites/#{url}"
51
- run "rm -Rf #{latest_release}/sites/#{url}/files"
52
- end
49
+ # remove shared directories
50
+ multisites.each_pair do |folder, url|
51
+ run "mv #{latest_release}/sites/#{folder} #{latest_release}/sites/#{url}"
52
+ run "rm -Rf #{latest_release}/sites/#{url}/files"
53
+ end
53
54
  end
54
55
 
55
56
  namespace :web do
56
- desc "Disable the application and show a message screen"
57
- task :disable do
58
- multisites.each_pair do |folder, url|
59
- run "#{drush_bin} -l #{url} -r #{latest_release} vset --yes site_offline 1"
60
- end
57
+ desc "Disable the application and show a message screen"
58
+ task :disable do
59
+ multisites.each_pair do |folder, url|
60
+ run "#{drush_bin} -l #{url} -r #{latest_release} vset --yes site_offline 1"
61
61
  end
62
+ end
62
63
 
63
- desc "Enable the application and remove the message screen"
64
- task :enable do
65
- multisites.each_pair do |folder, url|
66
- run "#{drush_bin} -l #{url} -r #{latest_release} vdel --yes site_offline"
67
- end
64
+ desc "Enable the application and remove the message screen"
65
+ task :enable do
66
+ multisites.each_pair do |folder, url|
67
+ run "#{drush_bin} -l #{url} -r #{latest_release} vdel --yes site_offline"
68
68
  end
69
+ end
69
70
  end
70
- end
71
+ end
71
72
 
72
- namespace :backup do
73
- desc "Perform a backup of database files"
74
- task :db, :roles => :db do
75
- puts "Backing up the database now and putting dump file in the previous release directory"
76
- multisites.each_pair do |folder, url|
77
- # define the filename (include the current_path so the dump file will be within the dirrectory)
78
- filename = "#{current_path}/#{folder}_dump-#{Time.now.to_s.gsub(/ /, "_")}.sql.gz"
79
- # dump the database for the proper environment
80
- run "#{drush_bin} -l #{url} -r #{current_path} sql-dump | gzip -c --best > #{filename}"
73
+ namespace :backup do
74
+ desc "Perform a backup of database files"
75
+ task :db, :roles => :db do
76
+ puts "Backing up the database now and putting dump file in the previous release directory"
77
+ multisites.each_pair do |folder, url|
78
+ # define the filename (include the current_path so the dump file will be within the dirrectory)
79
+ filename = "#{current_path}/#{folder}_dump-#{Time.now.to_s.gsub(/ /, "_")}.sql.gz"
80
+ # dump the database for the proper environment
81
+ run "#{drush_bin} -l #{url} -r #{current_path} sql-dump | gzip -c --best > #{filename}"
82
+ end
81
83
  end
82
84
  end
83
- end
84
85
 
85
- # --------------------------------------------
86
- # Drupal-specific methods
87
- # --------------------------------------------
88
- namespace :drupal do
86
+ # --------------------------------------------
87
+ # Drupal-specific methods
88
+ # --------------------------------------------
89
+ namespace :drupal do
89
90
  desc "Symlink shared directories"
90
91
  task :symlink, :except => { :no_release => true } do
91
- multisites.each_pair do |folder, url|
92
- run "ln -nfs #{shared_path}/#{url}/files #{current_release}/sites/#{url}/files"
93
- run "ln -nfs #{latest_release}/sites/#{url}/settings.php.#{stage} #{latest_release}/sites/#{url}/settings.php"
94
- run "#{drush_bin} -l #{url} -r #{current_path} vset --yes file_directory_path sites/#{url}/files"
95
- end
92
+ multisites.each_pair do |folder, url|
93
+ run "ln -nfs #{shared_path}/#{url}/files #{current_release}/sites/#{url}/files"
94
+ run "ln -nfs #{latest_release}/sites/#{url}/settings.php.#{stage} #{latest_release}/sites/#{url}/settings.php"
95
+ run "#{drush_bin} -l #{url} -r #{current_path} vset --yes file_directory_path sites/#{url}/files"
96
+ end
96
97
  end
97
98
 
98
99
  desc "Replace local database paths with remote paths"
99
100
  task :updatedb, :except => { :no_release => true } do
100
- multisites.each_pair do |folder, url|
101
- run "#{drush_bin} -l #{url} -r #{current_path} sqlq \"UPDATE {files} SET filepath = REPLACE(filepath,'sites/#{folder}/files','sites/#{url}/files');\""
102
- end
101
+ multisites.each_pair do |folder, url|
102
+ run "#{drush_bin} -l #{url} -r #{current_path} sqlq \"UPDATE {files} SET filepath = REPLACE(filepath,'sites/#{folder}/files','sites/#{url}/files');\""
103
+ end
103
104
  end
104
105
 
105
106
  desc "Clear all Drupal cache"
106
107
  task :clearcache, :except => { :no_release => true } do
107
- multisites.each_pair do |folder, url|
108
- run "#{drush_bin} -l #{url} -r #{current_path} cache-clear all"
109
- end
108
+ multisites.each_pair do |folder, url|
109
+ run "#{drush_bin} -l #{url} -r #{current_path} cache-clear all"
110
+ end
110
111
  end
111
-
112
+
112
113
  desc "Protect system files"
113
114
  task :protect, :except => { :no_release => true } do
114
- multisites.each_pair do |folder, url|
115
- run "chmod 644 #{latest_release}/sites/#{url}/settings.php*"
116
- end
115
+ multisites.each_pair do |folder, url|
116
+ run "chmod 644 #{latest_release}/sites/#{url}/settings.php*"
117
+ end
117
118
  end
118
-
119
- end
120
-
119
+
120
+ desc 'Copy over htaccess file'
121
+ task :htaccess do
122
+ run "cp #{latest_release}/htaccess.dist #{latest_release}/.htaccess"
123
+ end
124
+ end
121
125
  end
@@ -0,0 +1,139 @@
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
+ # Default variables
12
+ # --------------------------------------------
13
+ set :scm_username, "remotesvn"
14
+
15
+ # --------------------------------------------
16
+ # Task chains
17
+ # --------------------------------------------
18
+ after "deploy:setup", "deploy:setup_local"
19
+ after "deploy:finalize_update", "magento:activate_config"
20
+ after "deploy:symlink", "magento:symlink"
21
+ after "deploy", "magento:purge_cache"
22
+
23
+ # --------------------------------------------
24
+ # Overloaded tasks
25
+ # --------------------------------------------
26
+ namespace :deploy do
27
+ desc "Setup local files necessary for deployment"
28
+ task :setup_local do
29
+ # attempt to create files needed for proper deployment
30
+ system("touch htaccess.dist app/etc/local.xml.staging app/etc/local.xml.production")
31
+ end
32
+
33
+ desc "Setup shared application directories and permissions after initial setup"
34
+ task :setup_shared do
35
+ # remove Capistrano specific directories
36
+ run "rm -Rf #{shared_path}/log"
37
+ run "rm -Rf #{shared_path}/pids"
38
+ run "rm -Rf #{shared_path}/system"
39
+
40
+ # create shared directories
41
+ run "mkdir -p #{shared_path}/includes"
42
+ run "mkdir -p #{shared_path}/media"
43
+ run "mkdir -p #{shared_path}/sitemap"
44
+ run "mkdir -p #{shared_path}/var"
45
+
46
+ # set correct permissions
47
+ run "chmod 755 #{shared_path}/*"
48
+ end
49
+
50
+ desc "[internal] Touches up the released code. This is called by update_code after the basic deploy finishes."
51
+ task :finalize_update, :except => { :no_release => true } do
52
+ # synchronize media directory with shared data
53
+ run "rsync -rltDvzog #{latest_release}/media/ #{shared_path}/media/"
54
+
55
+ # put ".htaccess" in place
56
+ run "mv #{latest_release}/htaccess.dist #{latest_release}/.htaccess"
57
+
58
+ # remove directories that will be shared
59
+ run "rm -Rf #{latest_release}/includes"
60
+ run "rm -Rf #{latest_release}/media"
61
+ run "rm -Rf #{latest_release}/sitemap"
62
+ run "rm -Rf #{latest_release}/var"
63
+
64
+ # set the file and directory permissions
65
+ ash.fixperms
66
+ end
67
+
68
+ namespace :web do
69
+ desc "Disable the application and show a message screen"
70
+ task :disable, :except => { :no_release => true } do
71
+ run "touch #{current_path}/maintenance.flag"
72
+ end
73
+
74
+ desc "Enable the application and remove the message screen"
75
+ task :enable, :except => { :no_release => true } do
76
+ run "rm #{current_path}/maintenance.flag"
77
+ end
78
+ end
79
+ end
80
+
81
+ # --------------------------------------------
82
+ # Overloaded Ash tasks
83
+ # --------------------------------------------
84
+ namespace :ash do
85
+ desc "Set standard permissions for Ash servers"
86
+ task :fixperms, :except => { :no_release => true } do
87
+ # chmod the files and directories.
88
+ run "find #{latest_release} -type d -exec chmod 755 {} \\;"
89
+ run "find #{latest_release} -type f -exec chmod 644 {} \\;"
90
+ end
91
+ end
92
+
93
+ # --------------------------------------------
94
+ # Magento specific tasks
95
+ # --------------------------------------------
96
+ namespace :magento do
97
+ desc "Set appropriate configuration values for the stage"
98
+ task :activate_config, :except => { :no_release => true } do
99
+ run "cp -f #{latest_release}/app/etc/local.xml.#{stage} #{latest_release}/app/etc/local.xml"
100
+ end
101
+
102
+ desc "Symlink shared directories"
103
+ task :symlink, :except => { :no_release => true } do
104
+ run "ln -nfs #{shared_path}/includes #{current_release}/includes"
105
+ run "ln -nfs #{shared_path}/media #{current_release}/media"
106
+ run "ln -nfs #{shared_path}/sitemap #{current_release}/sitemap"
107
+ run "ln -nfs #{shared_path}/var #{current_release}/var"
108
+ end
109
+
110
+ desc "Purge Magento cache directory"
111
+ task :purge_cache, :except => { :no_release => true } do
112
+ run "rm -Rf #{shared_path}/var/cache/*"
113
+ end
114
+
115
+ desc "Watch Magento system log"
116
+ task :watch_logs, :except => { :no_release => true } do
117
+ run "tail -f #{shared_path}/var/log/system.log" do |channel, stream, data|
118
+ puts # for an extra line break before the host name
119
+ puts "#{channel[:host]}: #{data}"
120
+ break if stream == :err
121
+ end
122
+ end
123
+
124
+ desc "Watch Magento exception log"
125
+ task :watch_exceptions, :except => { :no_release => true } do
126
+ run "tail -f #{shared_path}/var/log/exception.log" do |channel, stream, data|
127
+ puts # for an extra line break before the host name
128
+ puts "#{channel[:host]}: #{data}"
129
+ break if stream == :err
130
+ end
131
+ end
132
+ end
133
+
134
+ # --------------------------------------------
135
+ # Custom tasks
136
+ # --------------------------------------------
137
+
138
+ # update core_config_data; set value = "domain" where scope_id = 0 and path = "web/unsecure/base_url"
139
+ end
data/lib/ash/magento.rb CHANGED
@@ -10,6 +10,7 @@ configuration.load do
10
10
  # --------------------------------------------
11
11
  # Task chains
12
12
  # --------------------------------------------
13
+ after "deploy:setup", "deploy:setup_local"
13
14
  after "deploy:setup_shared", "pma:install"
14
15
  after "deploy:finalize_update", "magento:activate_config"
15
16
  after "deploy:symlink", "magento:symlink"
@@ -19,6 +20,12 @@ configuration.load do
19
20
  # Overloaded tasks
20
21
  # --------------------------------------------
21
22
  namespace :deploy do
23
+ desc "Setup local files necessary for deployment"
24
+ task :setup_local do
25
+ # attempt to create files needed for proper deployment
26
+ system("touch app/etc/local.xml.staging app/etc/local.xml.production")
27
+ end
28
+
22
29
  desc "Setup shared application directories and permissions after initial setup"
23
30
  task :setup_shared do
24
31
  # remove Capistrano specific directories
@@ -41,7 +48,7 @@ configuration.load do
41
48
  # synchronize media directory with shared data
42
49
  sudo "rsync -rltDvzog #{latest_release}/media/ #{shared_path}/media/"
43
50
  sudo "chmod -R 777 #{shared_path}/media/"
44
-
51
+
45
52
  # remove directories that will be shared
46
53
  run "rm -Rf #{latest_release}/includes"
47
54
  run "rm -Rf #{latest_release}/media"
@@ -114,4 +121,4 @@ configuration.load do
114
121
 
115
122
  # update core_config_data; set value = "domain" where scope_id = 0 and path = "web/unsecure/base_url"
116
123
 
117
- end
124
+ end
metadata CHANGED
@@ -1,12 +1,8 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: capistrano-ash
3
3
  version: !ruby/object:Gem::Version
4
- prerelease: false
5
- segments:
6
- - 0
7
- - 0
8
- - 19
9
- version: 0.0.19
4
+ prerelease:
5
+ version: 1.0.0
10
6
  platform: ruby
11
7
  authors:
12
8
  - August Ash
@@ -14,7 +10,7 @@ autorequire:
14
10
  bindir: bin
15
11
  cert_chain: []
16
12
 
17
- date: 2011-01-09 00:00:00 -06:00
13
+ date: 2011-05-17 00:00:00 -05:00
18
14
  default_executable:
19
15
  dependencies: []
20
16
 
@@ -35,6 +31,7 @@ files:
35
31
  - lib/ash/base.rb
36
32
  - lib/ash/common.rb
37
33
  - lib/ash/drupal.rb
34
+ - lib/ash/hosted_magento.rb
38
35
  - lib/ash/magento.rb
39
36
  - lib/ash/wordpress.rb
40
37
  - lib/ash/zend_doctrine.rb
@@ -52,21 +49,17 @@ required_ruby_version: !ruby/object:Gem::Requirement
52
49
  requirements:
53
50
  - - ">="
54
51
  - !ruby/object:Gem::Version
55
- segments:
56
- - 0
57
52
  version: "0"
58
53
  required_rubygems_version: !ruby/object:Gem::Requirement
59
54
  none: false
60
55
  requirements:
61
56
  - - ">="
62
57
  - !ruby/object:Gem::Version
63
- segments:
64
- - 0
65
58
  version: "0"
66
59
  requirements: []
67
60
 
68
61
  rubyforge_project:
69
- rubygems_version: 1.3.7
62
+ rubygems_version: 1.6.2
70
63
  signing_key:
71
64
  specification_version: 3
72
65
  summary: Useful task libraries for August Ash recipes for Capistrano