capistrano-cul 0.0.7 → 0.0.8

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 161c5a342d46c0ab1d91da08ed039d91d75e9afa
4
- data.tar.gz: 974295390ae434f9b2092e9c6f2592360f3f9d60
3
+ metadata.gz: e6a9fce005273e3999a1dff23f21b96a1d264ea8
4
+ data.tar.gz: 6d7595486d3646d6c4e8ff31aa03530742e1eab3
5
5
  SHA512:
6
- metadata.gz: 33997e92ca28ff3af7e25dbdcd0d4ec5228c9f5adaefde025a08aa2cae89ec385e18058c293d11961155e8fc92341ca5c79e02264dca4b71b1641423f4783ea7
7
- data.tar.gz: 3ed6a1652ecf0d239a3cf21f5c9617de61b028a6e11b3658e0c0b83e09c33b830028dfce54544ed52fc61ac5b449228c3e37933ba15858ad52ae72d07e6545e4
6
+ metadata.gz: c6d672287dda12ce2d410a5f29c5b9ebbc6e436b087461fbde393c8874bc1dde1ebbc0d18abbe6be98ceb69e275f4af0de0407538a9468ca1152fea39c4aaddd
7
+ data.tar.gz: e320dcda0f88953b46c1e9dedc54ca80bafb0e94a2ace3a0f4b7652fd4f4c7d1e6e133f2fc300684808127c75057af878aa057125fceb15ccd85b60a7e225733
data/VERSION CHANGED
@@ -1 +1 @@
1
- 0.0.7
1
+ 0.0.8
@@ -1,2 +1,3 @@
1
1
  load File.expand_path('../../tasks/wp.cap', __FILE__)
2
2
  load File.expand_path('../../tasks/wp/update.cap', __FILE__)
3
+ load File.expand_path('../../tasks/wp/migrate.cap', __FILE__)
@@ -0,0 +1,133 @@
1
+ namespace :cul do
2
+ namespace :wp do
3
+ namespace :migrate do
4
+
5
+ desc "Copies the WordPress installation from one environment to another (e.g. prod to dev)"
6
+ task :copy_from do
7
+
8
+ require_cap_params!([:wp_docroot, :wp_content_path])
9
+
10
+ # TODO: Verify that destination wordpress has already had the setup and deploy tasks run for it
11
+ set :src_wp_docroot, ask("server path to source WordPress installation (to copy from)")
12
+ #set :src_wp_docroot, '/cul/cul0/lito/vmounts/haydn/var-www/kennedyprize/html'
13
+ #set :src_wp_docroot, '/cul/cul0/ldpd/culblogs-prod-migration-copy/prod/ssl-html'
14
+
15
+ # Confirm operation because it is destructive
16
+ puts "\nWARNING: This operation will obliterate all content in environment [#{fetch(:stage)}] and replace it with content from [#{fetch(:src_wp_docroot)}]."
17
+ puts "Are you sure you want to continue?"
18
+ set :confirm, ask('"y" or "yes" to continue')
19
+ unless ['y', 'yes'].include?(fetch(:confirm))
20
+ puts 'Copy operation has been cancelled because neither "y" nor "yes" were entered.'
21
+ next
22
+ end
23
+
24
+ # Check WP version on source and destination WordPress instances
25
+ on roles(:web) do
26
+ within fetch(:src_wp_docroot) do
27
+ # Ensure that source WordPress is running the latest version
28
+ result = capture :wp, 'core', 'check-update'
29
+ unless result.index('Success')
30
+ puts 'Could not copy from source WordPress because it is not running the latest version of WordPress. Please update source before running a copy operation.'
31
+ end
32
+ end
33
+
34
+ within fetch(:wp_docroot) do
35
+ # Ensure that destination WordPress is running the latest version
36
+ result = capture :wp, 'core', 'check-update'
37
+ unless result.index('Success')
38
+ puts "Could not copy TO destination [#{fetch(:stage)}] WordPress because it is not running the latest version of WordPress. Please update [#{fetch(:stage)}] before running a copy operation."
39
+ end
40
+ end
41
+ end
42
+
43
+ on roles(:web) do
44
+
45
+ db_export_tempfile_path = ''
46
+
47
+ within fetch(:src_wp_docroot) do
48
+ # On source WordPress...
49
+
50
+ # Export source WP DB to a temporary file
51
+ db_export_tempfile_path = Dir::Tmpname.make_tmpname '/tmp/', 'db_export_tempfile.sql'
52
+ execute :wp, 'db', 'export', db_export_tempfile_path
53
+ end
54
+
55
+ within fetch(:wp_docroot) do
56
+ # On destination WordPress...
57
+
58
+ # Drop all tables
59
+ execute :wp, 'db', 'reset', '--yes'
60
+
61
+ # Read in db file
62
+ execute :wp, 'db', 'import', db_export_tempfile_path
63
+
64
+ # Delete db file now that we're done with it
65
+ execute :rm, db_export_tempfile_path
66
+
67
+ # Delete and recreate the wp-content directory
68
+ execute :rm, '-rf', fetch(:wp_content_path)
69
+ execute :mkdir, fetch(:wp_content_path)
70
+
71
+ # Copy wp content from source, ignoring .nfs* lock files
72
+ # Note that because we have the '--copy-links' flag below, we're transforming all symlinks into real file copies
73
+ rsync_params = [
74
+ '--recursive',
75
+ '--perms',
76
+ '--times',
77
+ '--devices',
78
+ '--specials',
79
+ '--copy-links'
80
+ ]
81
+ # Exclude all repo-managed plugins, mu_plugins and themes
82
+ fetch(:wp_custom_plugins, {}).each do |plugin, repo_relative_path|
83
+ rsync_params << "--exclude plugins/#{plugin}"
84
+ end
85
+ fetch(:wp_custom_mu_plugins, {}).each do |mu_plugin, repo_relative_path|
86
+ rsync_params << "--exclude mu-plugins/#{mu_plugin}"
87
+ end
88
+
89
+ fetch(:wp_custom_themes, {}).each do |theme, repo_relative_path|
90
+ rsync_params << "--exclude themes/#{theme}"
91
+ end
92
+
93
+ # Exclude .nfs* lock files
94
+ rsync_params << '--exclude .nfs*'
95
+
96
+ # Define copy src
97
+ rsync_params << File.join(fetch(:src_wp_docroot), 'wp-content/')
98
+
99
+ # Define copy dest
100
+ rsync_params << fetch(:wp_content_path) + '/'
101
+
102
+ puts 'Copying wp-content. This may take a while for sites with a lot of uploads, plugins or themes...'
103
+
104
+ execute :rsync, *rsync_params
105
+
106
+ # Regenerate symlinks
107
+ invoke 'cul:wp:symlink_custom_plugins_and_themes'
108
+
109
+ # Make docroot readable and executable for "other" user so nginx, which runs as "nobody", can read
110
+ #execute :chmod, 'o+rx', fetch(:wp_docroot)
111
+ execute :find, fetch(:wp_docroot), '-type d -exec chmod o+rx "{}" \;'
112
+ execute :find, fetch(:wp_docroot), '-type f -exec chmod o+r "{}" \;'
113
+
114
+ # Invoke searchreplace task to update URL
115
+ puts "\nYou'll probably want to run the cul:wp:searchreplace command now, since it's likely that your WP URL differs between environments."
116
+ puts "Do you want to run a search and replace operation?"
117
+ set :confirm_searchreplace, ask('"y" or "yes" to continue')
118
+ if ['y', 'yes'].include?(fetch(:confirm_searchreplace))
119
+ invoke 'cul:wp:searchreplace'
120
+ else
121
+ puts '- Skipping search and replace because neither "y" nor "yes" were entered.'
122
+ end
123
+
124
+ puts "\nCopy operation complete!"
125
+ end
126
+
127
+ end
128
+
129
+ end
130
+
131
+ end
132
+ end
133
+ end
@@ -153,17 +153,28 @@ namespace :cul do
153
153
  set :replacement_string, ask("replacement string")
154
154
  puts "Are you sure you want to replace all occurrences of \"#{fetch(:search_string)}\" with \"#{fetch(:replacement_string)}\"?"
155
155
  set :confirm, ask('"y" or "yes" to continue')
156
- if fetch(:confirm) == 'y' || fetch(:confirm) == 'yes'
157
- puts 'Running search and replace. This may take a while for large databases...'
158
- start_time = Time.now
159
- #execute :wp, 'search-replace', "'#{search_string}'", "'#{replacement_string}'", '--skip-columns=guid'
160
- execute :wp, 'search-replace', "'#{fetch(:search_string)}'", "'#{fetch(:replacement_string)}'", '--skip-columns=guid'
161
- puts "Search and replace complete (took #{(Time.now - start_time).to_s} seconds)"
156
+
157
+ unless ['y', 'yes'].include?(fetch(:confirm))
158
+ puts 'Search and replace operation has been cancelled because neither "y" nor "yes" were entered.'
159
+ next
160
+ end
161
+
162
+ puts 'Running search and replace. This may take a while for large databases...'
163
+ start_time = Time.now
164
+
165
+ if fetch(:multisite, false)
166
+ puts "Since this is a multisite, you'll need to specify the source multisite url to continue:"
167
+ set :multisite_url, ask('full multisite install url (e.g. https://blogs.cul.columbia.edu)')
168
+
169
+ execute :wp, "--url=#{fetch(:multisite_url)}", 'search-replace', "'#{fetch(:search_string)}'", "'#{fetch(:replacement_string)}'", '--all-tables', '--skip-columns=guid'
162
170
  else
163
- puts 'Search and replace operation has been cancelled because "y" or "yes" were not entered.'
171
+ execute :wp, 'search-replace', "'#{fetch(:search_string)}'", "'#{fetch(:replacement_string)}'", '--skip-columns=guid'
164
172
  end
173
+
174
+ puts "Search and replace complete (took #{(Time.now - start_time).to_s} seconds)"
165
175
  end
166
176
  end
167
177
  end
178
+
168
179
  end
169
180
  end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: capistrano-cul
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.0.7
4
+ version: 0.0.8
5
5
  platform: ruby
6
6
  authors:
7
7
  - Carla Galarza
@@ -9,7 +9,7 @@ authors:
9
9
  autorequire:
10
10
  bindir: exe
11
11
  cert_chain: []
12
- date: 2017-09-14 00:00:00.000000000 Z
12
+ date: 2017-09-21 00:00:00.000000000 Z
13
13
  dependencies:
14
14
  - !ruby/object:Gem::Dependency
15
15
  name: capistrano
@@ -59,6 +59,7 @@ files:
59
59
  - lib/capistrano/cul/wp.rb
60
60
  - lib/capistrano/tasks/cul.cap
61
61
  - lib/capistrano/tasks/wp.cap
62
+ - lib/capistrano/tasks/wp/migrate.cap
62
63
  - lib/capistrano/tasks/wp/update.cap
63
64
  homepage: https://github.com/cul/capistrano-cul
64
65
  licenses: