capistrano-didi 0.3.2 → 0.4.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
data/VERSION CHANGED
@@ -1 +1 @@
1
- 0.3.2
1
+ 0.4.0
@@ -5,11 +5,11 @@
5
5
 
6
6
  Gem::Specification.new do |s|
7
7
  s.name = "capistrano-didi"
8
- s.version = "0.3.2"
8
+ s.version = "0.4.0"
9
9
 
10
10
  s.required_rubygems_version = Gem::Requirement.new(">= 0") if s.respond_to? :required_rubygems_version=
11
11
  s.authors = ["Koen Van Winckel"]
12
- s.date = "2012-03-23"
12
+ s.date = "2012-05-03"
13
13
  s.description = "didi is a collection of recipes for capistrano that allow drupal to be deployed, tested and used in a CI environment"
14
14
  s.email = "koenvw@gmail.com"
15
15
  s.executables = ["didify", "didi"]
@@ -34,6 +34,9 @@ set :db_host, 'localhost'
34
34
  set :drupal_path, 'drupal'
35
35
  set :srv_usr, 'www-data'
36
36
  set :enable_robots, false
37
+ set :no_disable, true
38
+ set :local_database, nil
39
+ set :backup_database, true
37
40
 
38
41
  ssh_options[:forward_agent] = true
39
42
  #ssh_options[:verbose] = :debug #FIXME
@@ -46,22 +49,20 @@ ssh_options[:forward_agent] = true
46
49
  _cset :settings, 'settings.php'
47
50
  _cset :files, 'files'
48
51
  _cset :dbbackups, 'db_backups'
49
- _cset :shared_children, [domain, File.join(domain, files)]
50
52
  _cset :drush_path, ''
51
53
 
52
- _cset(:shared_settings) { File.join(shared_path, domain, settings) }
53
- _cset(:shared_files) { File.join(shared_path, domain, files) }
54
- _cset(:dbbackups_path) { File.join(deploy_to, dbbackups, domain) }
54
+ _cset(:shared_settings) { domain.to_a.map { |d| File.join(shared_path, d, settings) } }
55
+ _cset(:shared_files) { domain.to_a.map { |d| File.join(shared_path, d, files) } }
56
+ _cset(:dbbackups_path) { domain.to_a.map { |d| File.join(deploy_to, dbbackups, d) } }
55
57
  _cset(:drush) { "drush -r #{current_path}" + (domain == 'default' ? '' : " -l #{domain}") } # FIXME: not in use?
56
58
 
59
+ _cset(:release_settings) { domain.to_a.map { |d| File.join(release_path, drupal_path, 'sites', d, settings) } }
60
+ _cset(:release_files) { domain.to_a.map { |d| File.join(release_path, drupal_path, 'sites', d, files) } }
61
+ _cset(:release_domain) { domain.to_a.map { |d| File.join(release_path, drupal_path, 'sites', d) } }
57
62
 
58
- _cset(:release_settings) { File.join(release_path, drupal_path, 'sites', domain, settings) }
59
- _cset(:release_files) { File.join(release_path, drupal_path, 'sites', domain, files) }
60
- _cset(:release_domain) { File.join(release_path, drupal_path, 'sites', domain) }
61
-
62
- _cset(:previous_release_settings) { releases.length > 1 ? File.join(previous_release, drupal_path, 'sites', domain, settings) : nil }
63
- _cset(:previous_release_files) { releases.length > 1 ? File.join(previous_release, drupal_path, 'sites', domain, files) : nil }
64
- _cset(:previous_release_domain) { releases.length > 1 ? File.join(previous_release, drupal_path, 'sites', domain) : nil }
63
+ _cset(:previous_release_settings) { releases.length > 1 ? domain.to_a.map { |d| File.join(previous_release, drupal_path, 'sites', d, settings) } : nil }
64
+ _cset(:previous_release_files) { releases.length > 1 ? domain.to_a.map { |d| File.join(previous_release, drupal_path, 'sites', d, files) } : nil }
65
+ _cset(:previous_release_domain) { releases.length > 1 ? domain.to_a.map { |d| File.join(previous_release, drupal_path, 'sites', d) } : nil }
65
66
 
66
67
  # =========================================================================
67
68
  # Extra dependecy checks
@@ -111,21 +112,23 @@ namespace :deploy do
111
112
  Creates the necessary file structure and the shared Drupal settings file.
112
113
  DESC
113
114
  task :setup, :except => { :no_release => true } do
114
- #try to create configuration file before writing directories to server
115
- configuration = drupal_settings(drupal_version)
116
-
117
115
  #Create shared directories
118
- # FIXME: chown / chmod require user to be member of
116
+ # FIXME: chown / chmod require user to be member of
119
117
  dirs = [deploy_to, releases_path, shared_path, dbbackups_path, shared_files]
120
- dirs += shared_children.map { |d| File.join(shared_path, d) }
118
+ dirs += domain.map { |d| File.join(shared_path, d) }
119
+
121
120
  run <<-CMD
122
- mkdir -p #{dirs.join(' ')} &&
123
- #{try_sudo} chown #{user}:#{srv_usr} #{shared_files} &&
124
- #{try_sudo} chmod g+w #{shared_files}
121
+ mkdir -p #{dirs.join(' ')}
122
+ #{try_sudo} chown #{user}:#{srv_usr} #{shared_files.to_a.join(' ')} &&
123
+ #{try_sudo} chmod g+w #{shared_files.to_a.join(' ')}
125
124
  CMD
126
125
 
127
126
  #create drupal config file
128
- put configuration, shared_settings
127
+ domain.to_a.each_with_index do |d, i|
128
+ configuration = drupal_settings(drupal_version, d)
129
+ put configuration, shared_settings[i]
130
+ end
131
+
129
132
  end
130
133
 
131
134
  desc "[internal] Rebuild files and settings symlinks"
@@ -139,19 +142,27 @@ namespace :deploy do
139
142
  end
140
143
 
141
144
 
142
- run "if [ ! -d #{release_domain} ]; then mkdir #{release_domain}; fi" # in case the default is not versioned
145
+ release_domain.each do |rd|
146
+ run "if [ ! -d #{rd} ]; then mkdir #{rd}; fi" # in case the default is not versioned
147
+ end
143
148
 
144
- run <<-CMD
145
- ln -nfs #{shared_files} #{release_files} &&
146
- ln -nfs #{shared_settings} #{release_settings}
147
- CMD
149
+ shared_files.each_with_index do |sf, i|
150
+ run <<-CMD
151
+ ln -nfs #{sf} #{release_files[i]} &&
152
+ ln -nfs #{shared_settings[i]} #{release_settings[i]}
153
+ CMD
154
+ end
148
155
 
149
156
  if previous_release
150
- run "if [ -d #{previous_release_domain} ]; then chmod 777 #{previous_release_domain}; fi" # if drupal changed the permissions of the folder
151
- run <<-CMD
152
- rm -f #{previous_release_settings} &&
153
- rm -f #{previous_release_files}
154
- CMD
157
+ # FIXME: executes on initial deploy:cold?
158
+ # FIXME: this breaks the current site untill deploy:symlink is executed ?
159
+ previous_release_domain.each_with_index do |prd, i|
160
+ run "if [ -d #{prd} ]; then chmod 777 #{prd}; fi" # if drupal changed the permissions of the folder
161
+ run <<-CMD
162
+ rm -f #{previous_release_settings[i]} &&
163
+ rm -f #{previous_release_files[i]}
164
+ CMD
165
+ end
155
166
  end
156
167
  end
157
168
 
@@ -236,24 +247,32 @@ namespace :drush do
236
247
 
237
248
  desc "Clear the Drupal site cache"
238
249
  task :cc do
239
- run "cd #{current_path}/#{drupal_path} && #{drush_path}drush cache-clear all"
250
+ domain.each do |d|
251
+ run "cd #{current_path}/#{drupal_path} && #{drush_path}drush" + (d == 'default' ? '' : " -l #{d}") + " cache-clear all"
252
+ end
240
253
  end
241
254
 
242
255
  desc "Revert all enabled feature modules on your site"
243
256
  task :fra do
244
- run "cd #{current_path}/#{drupal_path} && #{drush_path}drush features-revert-all -y"
257
+ domain.each do |d|
258
+ run "cd #{current_path}/#{drupal_path} && #{drush_path}drush" + (d == 'default' ? '' : " -l #{d}") + " features-revert-all -y"
259
+ end
245
260
  end
246
261
 
247
262
  desc "Install Drupal along with modules/themes/configuration using the specified install profile"
248
263
  task :si do
249
- dburl = "#{db_type}://#{db_username}:#{db_password}@#{db_host}/#{db_name}"
250
- run "cd #{current_path}/#{drupal_path} && #{drush_path}drush site-install #{profile} --db-url=#{dburl} --sites-subdir=default --account-name=admin --account-pass=#{adminpass} --account-mail=#{sitemail} --site-mail='#{sitemail}' --site-name='#{site}' -y"
264
+ domain.each do |d|
265
+ dburl = "#{db_type}://#{db_username}:#{db_password}@#{db_host}/#{db_name.gsub("%domain", d)}"
266
+ run "cd #{current_path}/#{drupal_path} && #{drush_path}drush site-install #{profile} --db-url=#{dburl} --sites-subdir=#{d} --account-name=admin --account-pass=#{adminpass} --account-mail=#{sitemail} --site-mail='#{sitemail}' --site-name='#{site.gsub("%domain", d)}' -y"
267
+ end
251
268
  bl
252
269
  end
253
270
 
254
271
  desc "[internal] Enable the baseline feature"
255
272
  task :bl do
256
- run "cd #{current_path}/#{drupal_path} && #{drush_path}drush pm-enable #{baseline} -y"
273
+ domain.each do |d|
274
+ run "cd #{current_path}/#{drupal_path} && #{drush_path}drush" + (d == 'default' ? '' : " -l #{d}") + " pm-enable #{baseline.gsub("%domain", d)} -y"
275
+ end
257
276
  cc
258
277
  end
259
278
  desc "[internal] Enable the simpletest feature"
@@ -267,7 +286,9 @@ namespace :drush do
267
286
  if drupal_version == 6
268
287
  run "cd #{current_path}/#{drupal_path} && #{drush_path}drush vset --always-set site_offline 0"
269
288
  else
270
- run "cd #{current_path}/#{drupal_path} && #{drush_path}drush vset --always-set maintenance_mode 0"
289
+ domain.each do |d|
290
+ run "cd #{current_path}/#{drupal_path} && #{drush_path}drush" + (d == 'default' ? '' : " -l #{d}") + " vset --always-set maintenance_mode 0"
291
+ end
271
292
  end
272
293
  end
273
294
 
@@ -276,22 +297,27 @@ namespace :drush do
276
297
  if drupal_version == 6
277
298
  run "cd #{current_path}/#{drupal_path} && #{drush_path}drush vset --always-set site_offline 1"
278
299
  else
279
- run "cd #{current_path}/#{drupal_path} && #{drush_path}drush vset --always-set maintenance_mode 1"
300
+ domain.each do |d|
301
+ run "cd #{current_path}/#{drupal_path} && #{drush_path}drush" + (d == 'default' ? '' : " -l #{d}") + " vset --always-set maintenance_mode 1"
302
+ end
280
303
  end
281
304
  end
282
305
 
283
306
  desc "Apply any database updates required (as with running update.php)"
284
307
  task :updb do
285
- run "cd #{current_path}/#{drupal_path} && #{drush_path}drush updatedb -y"
308
+ domain.each do |d|
309
+ run "cd #{current_path}/#{drupal_path} && #{drush_path}drush" + (d == 'default' ? '' : " -l #{d}") + " updatedb -y"
310
+ end
286
311
  end
287
312
 
288
313
  desc "Update via drush, runs fra, updb and cc"
289
314
  task :update do
290
- dissite
315
+ dissite unless no_disable
291
316
  updb
317
+ cc # fix for user_permissions constraint?
292
318
  fra
293
- ensite
294
- cc
319
+ cc # for good measure?
320
+ ensite unless no_disable
295
321
  manage.block_robots unless enable_robots
296
322
  end
297
323
 
@@ -365,29 +391,36 @@ end
365
391
 
366
392
  namespace :manage do
367
393
 
394
+ desc "Block bots via robots.txt"
368
395
  task :block_robots do
369
396
  put "User-agent: *\nDisallow: /", "#{current_path}/#{drupal_path}/robots.txt"
370
397
  end
371
398
 
372
399
  task :dbdump_previous do
373
400
  #Backup the previous release's database
374
- if previous_release
401
+ if previous_release && backup_database
375
402
  run "cd #{current_path}/#{drupal_path} && #{drush_path}drush sql-dump > #{ File.join(dbbackups_path, "#{releases[-2]}.sql") }"
376
403
  end
377
404
  end
378
405
 
379
406
  desc 'Dump remote database and restore locally'
380
407
  task :pull_dump do
381
- sql_file = File.join(dbbackups_path, "#{releases.last}-pull.sql")
382
- # dump & gzip remote file
383
- run "cd #{current_path}/#{drupal_path} && #{drush_path}drush sql-dump > #{sql_file} && gzip -f #{sql_file}"
384
- # copy to local
385
- system "if [ ! -d build ]; then mkdir build; fi" # create build folder locally if needed
386
- download "#{sql_file}.gz", "build/", :once => true, :via => :scp
387
- run "rm #{sql_file}.gz"
388
- # extract and restore
389
- # FIXME
390
- #system "gunzip -f build/#{File.basename(sql_file)}.gz && mysql {local_database} < build/#{File.basename(sql_file)}"
408
+ if local_database.nil?
409
+ puts "NO LOCAL DATABASE FOUND, set :local_database in the config file.."
410
+ else
411
+ set(:runit, Capistrano::CLI.ui.ask("WARNING!! this will overwrite this local database: '#{local_database}', type 'yes' to continue: "))
412
+ if runit == 'yes'
413
+ sql_file = File.join(dbbackups_path, "#{releases.last}-pull.sql")
414
+ # dump & gzip remote file
415
+ run "cd #{current_path}/#{drupal_path} && #{drush_path}drush sql-dump > #{sql_file} && gzip -f #{sql_file}"
416
+ # copy to local
417
+ system "if [ ! -d build ]; then mkdir build; fi" # create build folder locally if needed
418
+ download "#{sql_file}.gz", "build/", :once => true, :via => :scp
419
+ run "rm #{sql_file}.gz"
420
+ # extract and restore
421
+ system "gunzip -f build/#{File.basename(sql_file)}.gz && echo \"DROP DATABASE #{local_database};CREATE DATABASE #{local_database}\" | mysql && mysql #{local_database} < build/#{File.basename(sql_file)}" if local_database
422
+ end
423
+ end
391
424
  end
392
425
 
393
426
  task :push_dump do
@@ -401,11 +434,12 @@ end
401
434
  # =========================
402
435
 
403
436
  # Builds initial contents of the Drupal website's settings file
404
- def drupal_settings(version)
437
+ def drupal_settings(version, domain)
438
+ db_domain_name = db_name.gsub("%domain", domain)
405
439
  if version.to_s == '6'
406
440
  settings = <<-STRING
407
441
  <?php
408
- $db_url = "#{db_type}://#{db_username}:#{db_password}@#{db_host}/#{db_name}";
442
+ $db_url = "#{db_type}://#{db_username}:#{db_password}@#{db_host}/#{db_domain_name}";
409
443
  ini_set('arg_separator.output', '&amp;');
410
444
  ini_set('magic_quotes_runtime', 0);
411
445
  ini_set('magic_quotes_sybase', 0);
@@ -424,7 +458,7 @@ ini_set('url_rewriter.tags', '');
424
458
  settings = <<-STRING
425
459
  <?php
426
460
  $databases = array ('default' => array ('default' => array (
427
- 'database' => '#{db_name}',
461
+ 'database' => '#{db_domain_name}',
428
462
  'username' => '#{db_username}',
429
463
  'password' => '#{db_password}',
430
464
  'host' => '#{db_host}',
@@ -442,4 +476,4 @@ ini_set('session.cookie_lifetime', 2000000);
442
476
  end
443
477
  end
444
478
 
445
- end # Capistrano::Configuration.instance.load
479
+ end # Capistrano::Configuration.instance.load
metadata CHANGED
@@ -1,13 +1,13 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: capistrano-didi
3
3
  version: !ruby/object:Gem::Version
4
- hash: 23
4
+ hash: 15
5
5
  prerelease:
6
6
  segments:
7
7
  - 0
8
- - 3
9
- - 2
10
- version: 0.3.2
8
+ - 4
9
+ - 0
10
+ version: 0.4.0
11
11
  platform: ruby
12
12
  authors:
13
13
  - Koen Van Winckel
@@ -15,7 +15,7 @@ autorequire:
15
15
  bindir: bin
16
16
  cert_chain: []
17
17
 
18
- date: 2012-03-23 00:00:00 Z
18
+ date: 2012-05-03 00:00:00 Z
19
19
  dependencies:
20
20
  - !ruby/object:Gem::Dependency
21
21
  requirement: &id001 !ruby/object:Gem::Requirement