capistrano-cul 0.0.18 → 0.0.19

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: b8f18b075e8eb0daa92a48fbba497a780a6a8cb2
4
- data.tar.gz: 28bffd4b2afec0899e3918e3d09c6ac9aacf4903
3
+ metadata.gz: f5d82a7a06ebae390facf636f6505f66d9f8a93c
4
+ data.tar.gz: 1a8b7288032a93ce2f9b7b03d42620f084c120ee
5
5
  SHA512:
6
- metadata.gz: 3171e4f2cf8c7e2ff01c1bca1ef4de7c563619f376a203278b51c8f405303620cd7bd86d218583208d53e6c110366973c5885fddee20b3eeaa740ba1752357fc
7
- data.tar.gz: 3ee2c4c9ef618595da89a4c67f7d2eb8d158e6c48681dc1195d7c5e6a10e3d3787156e51e601b11346c8b30c7078f5355ded52c8ef2056d0adf2e6fed25ae22e
6
+ metadata.gz: 655d5ab7c8db37374a8f21d79ecb6f9206e330ca3d6401134915f73c66760f3390f6100388273d14ca225b4c6da9ad38dc1ed151d2cc3cc958550b8580c52203
7
+ data.tar.gz: e6dbecd9ea3e373b5ec8a7ed7b0dc2d5f4379bd76fdc2095962e4480bd89792447b43a29a937b77dc6b66e74df9eb9f6a996ca99ba2d7bc5a007cac9f58fba20
data/VERSION CHANGED
@@ -1 +1 @@
1
- 0.0.18
1
+ 0.0.19
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.18
4
+ version: 0.0.19
5
5
  platform: ruby
6
6
  authors:
7
7
  - Carla Galarza
@@ -72,11 +72,9 @@ files:
72
72
  - lib/capistrano/cul/tasks.rb
73
73
  - lib/capistrano/cul/wp.rb
74
74
  - lib/capistrano/tasks/cul.cap
75
- - lib/capistrano/tasks/wp-old.cap
76
75
  - lib/capistrano/tasks/wp.cap
77
76
  - lib/capistrano/tasks/wp/deploy.cap
78
77
  - lib/capistrano/tasks/wp/install.cap
79
- - lib/capistrano/tasks/wp/migrate-old.cap
80
78
  - lib/capistrano/tasks/wp/migrate.cap
81
79
  - lib/capistrano/tasks/wp/setup.cap
82
80
  - lib/capistrano/tasks/wp/update.cap
@@ -1,250 +0,0 @@
1
- CUL_ALLOWED_UPLOAD_TYPES_PLUGIN_NAME = 'cul-allowed-upload-types'
2
- CUL_ALLOWED_UPLOAD_TYPES_REPO_URL = "https://github.com/cul/#{CUL_ALLOWED_UPLOAD_TYPES_PLUGIN_NAME}"
3
-
4
- # Set cul_allowed_upload_types_version here so it can be overridden by env config
5
- set :cul_allowed_upload_types_version, 'v0.5.0'
6
-
7
- namespace :cul do
8
- namespace :wp do
9
-
10
- before 'deploy:starting', 'cul:wp:require_deploy_params'
11
-
12
- before 'deploy:starting', 'cul:wp:display_maintenance_mode_warning'
13
- after 'deploy:starting', 'cul:wp:enable_maintenance_mode'
14
- after 'deploy:starting', 'cul:wp:update_cul_allowed_upload_types_plugin'
15
- after :deploy, 'cul:wp:symlink_custom_plugins_and_themes'
16
- after :deploy, 'cul:wp:disable_maintenance_mode'
17
-
18
-
19
- task :require_deploy_params do
20
- require_cap_variables!([:branch, :wp_version, :wp_docroot, :wp_content_path])
21
- end
22
-
23
- desc "Displays a message to the deploying user about how to disable maintenance mode"
24
- task :display_maintenance_mode_warning do
25
- puts color_text("WARNING: Starting a deployment will set WordPress to maintenance mode. If you cancel deployment mid-way through, you'll need to manually disable maintenance mode by running: cap [env] cul:wp:disable_maintenance_mode")
26
- end
27
-
28
- desc "Enables maintenance mode for the WordPress site in the deploy environment"
29
- task :enable_maintenance_mode do
30
- path_to_maintenance_file = maintenance_file_path # save path to local variable because we can't call method inside `on roles(:web)`
31
- on roles(:web) do
32
- within fetch(:wp_docroot) do
33
- # Set maintenance $upgrading value to current time.
34
- # Note that WordPress will ignore maintenance mode file
35
- # after 10 minutes have passed after the maintenance time
36
- # we set in the file.
37
- execute :echo, "'<?php $upgrading = #{Time.now.to_i};'", '>', path_to_maintenance_file
38
- end
39
- end
40
- puts color_text("Maintenance mode enabled!")
41
- end
42
-
43
- desc "Disable maintenance mode for the WordPress site in the deploy environment"
44
- task :disable_maintenance_mode do
45
- path_to_maintenance_file = maintenance_file_path # save path to local variable because we can't call method inside `on roles(:web)`
46
- on roles(:web) do
47
- within fetch(:wp_docroot) do
48
- if test("[ -f #{path_to_maintenance_file} ]")
49
- execute :rm, path_to_maintenance_file
50
- else
51
- puts "No maintenance file found, so there's nothing to delete."
52
- end
53
- end
54
- end
55
- puts color_text("Maintenance mode disabled!")
56
- end
57
-
58
- desc "Creates symlinks for custom plugins and themes as part of a WordPress deployment. Generally run as an `after :deploy` hook."
59
- task :symlink_custom_plugins_and_themes do
60
- symlink_custom_plugins_and_themes
61
- end
62
-
63
- # Runs normal deploy task, downloads new copy of WP, sets up docroot, runs
64
- # deploy command, sets up symlinks. Does not run WP install and does not
65
- # create any wp users.
66
- desc "Sets up a WordPress docroot and runs deployment; does not install wordpress and does not create any users"
67
- task :setup do
68
- puts "Deploying repo branch: #{fetch(:branch)}"
69
-
70
- set :wp_version, ask('WordPress version to download:', 'latest')
71
- # Printing out wp_version here because the `set` command above only runs
72
- # the first time its associated symbol is referenced, and we want to
73
- # capture version before running any other commands.
74
- puts "Setting up wp_version: #{fetch(:wp_version)}"
75
-
76
- require_cap_variables!([:branch, :wp_version, :wp_docroot, :wp_content_path])
77
-
78
- on roles(:web) do
79
- wp_docroot_wp_config_file_path = File.join(fetch(:wp_docroot), 'wp-config.php')
80
- wp_docroot_robots_txt_file_path = File.join(fetch(:wp_docroot), 'robots.txt')
81
- wp_docroot_wp_content_path = File.join(fetch(:wp_docroot), 'wp-content')
82
-
83
- shared_wp_config_file_path = shared_path.join('wp-config.php')
84
- shared_robots_txt_file_path = shared_path.join('robots.txt')
85
-
86
- wp_content_path = fetch(:wp_content_path)
87
-
88
- # Create nginx logs directory if it doesn't already exist
89
- execute :mkdir, '-p', deploy_path.join('logs')
90
-
91
- # Make full path to wp_docroot directory if not exist
92
- execute :mkdir, '-p', fetch(:wp_docroot)
93
-
94
- # Make full path to wp_content_path if not exist
95
- execute :mkdir, '-p', wp_content_path
96
-
97
- invoke 'deploy' # Deploy before doing setup
98
-
99
- # If wp_docroot/wp-includes does not exist, do wordpress download
100
- unless test("[ -d #{File.join(fetch(:wp_docroot), 'wp-includes')} ]")
101
- # Download and unpack new WP instance to wp_docroot
102
- execute :wp, 'core', ['download', "--version=#{fetch(:wp_version)}", "--path=#{fetch(:wp_docroot)}"]
103
- end
104
-
105
- # Check for wp-config.php file in shared. Create if it doesn't exist.
106
- unless test("[ -f #{shared_wp_config_file_path} ]")
107
- # If no wp-config.php file is found in the 'shared' directory, copy WordPress built-in wp-config-sample.php to there
108
- execute :cp, File.join(fetch(:wp_docroot), 'wp-config-sample.php'), shared_wp_config_file_path
109
- end
110
-
111
- # Delete original wp-sample-config.php
112
- execute :rm, '-f', File.join(fetch(:wp_docroot), 'wp-config-sample.php')
113
- # Create symlink for wp_document_root wp-config.php to 'shared' version.
114
- execute :ln, '-sf', shared_wp_config_file_path, wp_docroot_wp_config_file_path
115
-
116
- # Check for robots.txt file in shared. Create if it doesn't exist.
117
- unless test("[ -f #{shared_robots_txt_file_path} ]")
118
- execute "echo -e \"User-agent: *\nDisallow: /\" > #{shared_robots_txt_file_path}"
119
- end
120
- # Create symlink for wp_document_root robots.txt to 'shared' version.
121
- execute :ln, '-sf', shared_robots_txt_file_path, wp_docroot_robots_txt_file_path
122
-
123
- # Check for actual wp-content directory at wp_content_path. Create if it doesn't exist.
124
- unless test("[ -d #{wp_content_path} ]")
125
- # If no wp-config.php file is found in the 'shared' directory, copy WordPress built-in wp-config-sample.php to there
126
- execute :cp, '-r', wp_docroot_wp_content_path, wp_content_path
127
- end
128
- # Delete original wp-content directory
129
- execute :rm, '-rf', wp_docroot_wp_content_path
130
- # Create symlink for wp_document_root wp-content to wp_content_path
131
- execute :ln, '-sf', wp_content_path, wp_docroot_wp_content_path
132
- end
133
- symlink_custom_plugins_and_themes
134
- end
135
-
136
-
137
-
138
- def self.symlink_custom_plugins_and_themes
139
- on roles(:web) do
140
- wp_content_path = fetch(:wp_content_path)
141
- wp_content_plugin_path = File.join(wp_content_path, 'plugins')
142
- wp_content_mu_plugin_path = File.join(wp_content_path, 'mu-plugins')
143
- wp_content_themes_path = File.join(wp_content_path, 'themes')
144
-
145
- if test("[ -d #{wp_content_path} ]")
146
-
147
- ### Create necessary directories
148
- execute :mkdir, '-p', wp_content_plugin_path
149
- execute :mkdir, '-p', wp_content_mu_plugin_path
150
- execute :mkdir, '-p', wp_content_themes_path
151
-
152
- ### Remove old symlinks
153
- [wp_content_plugin_path, wp_content_mu_plugin_path, wp_content_themes_path].each do |dir|
154
- execute :find, dir, '-maxdepth 1', '-type l', '-exec rm {} \;'
155
- end
156
-
157
- ### Add latest symlinks
158
- fetch(:wp_custom_plugins, {}).each do |plugin, repo_relative_path|
159
- execute :ln, '-sf', File.join(current_path, repo_relative_path), File.join(wp_content_plugin_path, plugin)
160
- end
161
-
162
- fetch(:wp_custom_mu_plugins, {}).each do |mu_plugin, repo_relative_path|
163
- execute :ln, '-sf', File.join(current_path, repo_relative_path), File.join(wp_content_mu_plugin_path, mu_plugin)
164
- end
165
-
166
- fetch(:wp_custom_themes, {}).each do |theme, repo_relative_path|
167
- execute :ln, '-sf', File.join(current_path, repo_relative_path), File.join(wp_content_themes_path, theme)
168
- end
169
-
170
- ### Also symlink to cul-allowed-upload-types plugin files
171
- within deploy_path do
172
- cul_allowed_upload_types_plugin_top_level_files_and_dirs = capture(:find, CUL_ALLOWED_UPLOAD_TYPES_PLUGIN_NAME, '-mindepth', '2', '-maxdepth', '2').split("\n")
173
- # Symlink all plugin files and directories
174
- cul_allowed_upload_types_plugin_top_level_files_and_dirs.each do |plugin_file_or_directory_path|
175
- #puts 'Run: ' + [:ln, '-sf', File.join(deploy_path, plugin_file_or_directory_path), File.join(wp_content_mu_plugin_path, File.basename(plugin_file_or_directory_path))].join(' ')
176
- execute :ln, '-sf', File.join(deploy_path, plugin_file_or_directory_path), File.join(wp_content_mu_plugin_path, File.basename(plugin_file_or_directory_path))
177
- end
178
- end
179
-
180
- end
181
- end
182
- end
183
-
184
- desc "Downloads the latest version of the cul-allowed-upload-types plugin"
185
- task :update_cul_allowed_upload_types_plugin do
186
- # Download plugin to deploy_path
187
- on roles(:web) do
188
- within deploy_path do
189
- # Clear out old plugin directory if it exists
190
- execute :rm, '-rf', CUL_ALLOWED_UPLOAD_TYPES_PLUGIN_NAME
191
- # Re-create plugin directory and temp dir inside of it
192
- allowed_upload_types_tempdir = File.join(CUL_ALLOWED_UPLOAD_TYPES_PLUGIN_NAME, 'tmp')
193
- execute :mkdir, '-p', allowed_upload_types_tempdir
194
-
195
- # Download and unzip plugin
196
- allowed_upload_types_temp_zipfile = File.join(allowed_upload_types_tempdir, 'plugin.zip')
197
- zip_file_name = "#{fetch(:cul_allowed_upload_types_version)}.zip"
198
- execute :curl, '-L', '--silent', '-o', allowed_upload_types_temp_zipfile, "#{CUL_ALLOWED_UPLOAD_TYPES_REPO_URL}/archive/#{zip_file_name}"
199
- execute :unzip, allowed_upload_types_temp_zipfile, '-d', CUL_ALLOWED_UPLOAD_TYPES_PLUGIN_NAME
200
-
201
- # Delete temp dir after unzip
202
- execute :rm, '-rf', allowed_upload_types_tempdir
203
-
204
- # Remove .gitignore file from plugin directory so we don't symlink to it later
205
- execute :find, CUL_ALLOWED_UPLOAD_TYPES_PLUGIN_NAME, '-name', '.gitignore', '-delete'
206
- end
207
- end
208
- end
209
-
210
- desc "Runs a search and replace operation on the tables in a WordPress installation"
211
- task :searchreplace do
212
- on roles(:web) do
213
- within fetch(:wp_docroot) do
214
- set :search_string, ask("search string")
215
- set :replacement_string, ask("replacement string")
216
- puts "Are you sure you want to replace all occurrences of \"#{fetch(:search_string)}\" with \"#{fetch(:replacement_string)}\"?"
217
- set :confirm, ask('"y" or "yes" to continue')
218
-
219
- unless ['y', 'yes'].include?(fetch(:confirm))
220
- puts 'Search and replace operation has been cancelled because neither "y" nor "yes" were entered.'
221
- next
222
- end
223
-
224
- puts 'Running search and replace. This may take a while for large databases...'
225
- start_time = Time.now
226
-
227
- if fetch(:multisite, false)
228
- puts "Since this is a multisite, you'll need to specify the source multisite instance domain to continue:"
229
- set :multisite_url, ask('source multisite instance domain (e.g. blogs.cul.columbia.edu)')
230
-
231
- execute :wp, "--url=#{fetch(:multisite_url)}", 'search-replace', "'#{fetch(:search_string)}'", "'#{fetch(:replacement_string)}'", '--all-tables', '--skip-columns=guid'
232
- else
233
- execute :wp, 'search-replace', "'#{fetch(:search_string)}'", "'#{fetch(:replacement_string)}'", '--skip-columns=guid'
234
- end
235
-
236
- puts "Search and replace complete (took #{(Time.now - start_time).to_s} seconds)"
237
- end
238
- end
239
- end
240
-
241
- def self.cul_allowed_upload_types_plugin_path
242
- File.join('mu-plugins', CUL_ALLOWED_UPLOAD_TYPES_PLUGIN_NAME)
243
- end
244
-
245
- def self.maintenance_file_path
246
- File.join(fetch(:wp_docroot), '.maintenance')
247
- end
248
-
249
- end
250
- end
@@ -1,268 +0,0 @@
1
- require 'tempfile'
2
- require 'json'
3
-
4
- namespace :cul do
5
- namespace :wp do
6
- namespace :migrate do
7
-
8
- desc "Copies the WordPress installation from one environment to another (e.g. prod to dev)"
9
- task :copy_from do
10
- # Need to store path as local variable so it can be referenced in `on roles(:web) do` portion of script
11
- path_to_allowed_upload_types_plugin = cul_allowed_upload_types_plugin_path
12
-
13
- require_cap_variables!([:wp_docroot, :wp_content_path])
14
-
15
- if fetch(:multisite, false)
16
- puts "Since this is a multisite, you'll need to specify the source multisite instance domain to continue:"
17
- set :source_site_multisite_url, ask('source multisite instance domain (e.g. blogs.cul.columbia.edu)')
18
- fetch(:source_site_multisite_url)
19
-
20
- puts "And you'll also need to specify the destination multisite instance domain to continue:"
21
- set :destination_site_multisite_url, ask('destination multisite instance domain (e.g. blogs-dev.cul.columbia.edu)')
22
- fetch(:destination_site_multisite_url)
23
- end
24
-
25
- # TODO: Would be nice to verify that destination wordpress has already had the setup and deploy tasks run for it
26
- set :src_wp_docroot, ask("server path to source WordPress installation (to copy from)")
27
-
28
- # Confirm operation because it is destructive
29
- puts "\nWARNING: This operation will obliterate all content in environment [#{fetch(:stage)}] and replace it with content from [#{fetch(:src_wp_docroot)}]."
30
- puts "Are you sure you want to continue?"
31
- set :confirm, ask('"y" or "yes" to continue')
32
- unless ['y', 'yes'].include?(fetch(:confirm))
33
- puts 'Copy operation has been cancelled because neither "y" nor "yes" were entered.'
34
- next
35
- end
36
-
37
- # Don't really care about maintenance mode because we're completely destroying the target environment
38
- # Enter maintenance mode
39
- #invoke 'cul:wp:enable_maintenance_mode'
40
-
41
- # Check WP version on source WordPress instance
42
- failure = false
43
- on roles(:web) do
44
- within fetch(:src_wp_docroot) do
45
- # Ensure that source WordPress is running the latest version
46
- result = capture :wp, (fetch(:multisite, false) ? "--url=#{fetch(:source_site_multisite_url)}" : ''), 'core', 'check-update'
47
- unless result.index('Success')
48
- 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.'
49
- failure = true
50
- end
51
- end
52
- end
53
- next if failure # End if the previous checks failed
54
-
55
- on roles(:web) do
56
- # Destroy current wp_docroot
57
- execute :rm, '-rf', fetch(:wp_docroot)
58
- execute :mkdir, fetch(:wp_docroot)
59
- end
60
-
61
- # Download new copy of wordpress
62
- invoke 'cul:wp:setup'
63
-
64
- path_to_list_of_files_to_copy = ''
65
-
66
- on roles(:web) do
67
- # In source site's wp-content directory, generate file list to copy
68
- within File.join(fetch(:src_wp_docroot), 'wp-content') do
69
- # We're going to be copying wp-content in two parts
70
- # 1. Everything else under wp-content EXCEPT uploads, blogs.dir,
71
- # plugins, themes, mu-plugins
72
- # 2. Everything under uploads AND wpblogs.dir with
73
- # cul-allowed-upload-types file extension filter applied
74
-
75
- # Make sure find command handles non-ASCII chars
76
- #execute 'LC_ALL=en_US.iso885915'
77
-
78
- # Generate two find commands for the above searches
79
- find_non_upload_dirs = '. -type f ' +
80
- # EXCLUDE plugins, themes, mu-plugins, uploads, and blogs.dir
81
- "-not \\( -path './plugins/*' -o -path './mu-plugins/*' -o -path './themes/*' -o -path './uploads/*' -o -path './blogs.dir/*' \\) " +
82
- # EXCLUDE certain unwanted files and paths
83
- "-a -not \\( -name '.nfs*' -o -name '*.tmp.*' \\) " +
84
- "-a -not \\( -path '*/.git*' -o -path '*/.svn*' -o -path '*/.hg*' \\)"
85
-
86
- find_upload_dirs = '. -type f ' +
87
- # INCLUDE ONLY uploads and blogs.dir
88
- "\\( -path './uploads/*' -o -path './blogs.dir/*' \\) " +
89
- # EXCLUDE certain unwanted files and paths
90
- "-a -not \\( -name '.nfs*' -o -name '*.tmp.*' \\) " +
91
- "-a -not \\( -path '*/.git*' -o -path '*/.svn*' -o -path '*/.hg*' \\) " +
92
- # INCLUDE ONLY certain file extensions
93
- "-a \\( " + JSON.parse(capture(:wp, (fetch(:multisite, false) ? "--url=#{fetch(:source_site_multisite_url)}" : ''), 'eval', '"echo cul_allowed_upload_file_extensions_as_json();"')).map{ |allowed_file_extension|
94
- "-iname '*.#{allowed_file_extension}'"
95
- }.join(' -o ') + " \\) "
96
-
97
- path_to_list_of_files_to_copy = '/tmp/WP' + fetch(:wp_docroot).gsub('/', '-') + '-' + Time.now.to_i.to_s + '-files.txt'
98
- execute :find, find_non_upload_dirs, ' > ', path_to_list_of_files_to_copy
99
- execute :find, find_upload_dirs, ' >> ', path_to_list_of_files_to_copy
100
-
101
- # Print out which files won't be copied
102
- files_not_copied = capture(:comm, '-23', "<(find . -type f \\( -path './uploads/*' -o -path './blogs.dir/*' \\) | sort)", "<(find #{find_upload_dirs} | sort)")
103
-
104
- puts (
105
- "The following files will not be copied:\n" +
106
- "-------------------------\n" +
107
- "./plugins\n" +
108
- "./mu-plugins\n" +
109
- "./themes\n" +
110
- files_not_copied + "\n" +
111
- "-------------------------"
112
- )
113
- end
114
-
115
- # For destination wordpress, delete and recreate the wp-content directory
116
- execute :rm, '-rf', fetch(:wp_content_path)
117
- execute :mkdir, fetch(:wp_content_path)
118
-
119
- # Copy wp-content files (from path_to_list_of_files_to_copy) from source WP to destination WP
120
- # Note that because we have the '--copy-links' flag below, we're transforming all symlinks into real file copies
121
- rsync_params = [
122
- '--recursive',
123
- '--perms',
124
- '--times',
125
- '--devices',
126
- '--specials',
127
- '--copy-links',
128
- '--prune-empty-dirs'
129
- ]
130
-
131
- # we're only copying files from the given file list
132
- rsync_params << "--files-from=#{path_to_list_of_files_to_copy}"
133
-
134
- src_wp_content_dir = File.join(fetch(:src_wp_docroot), 'wp-content/')
135
- # Run a find operation on the wp-content dir to pre-cache all non-UTF compliant files prior to our rsync operation (to handle files with smart quotes, em dashes, foreign characters, etc.)
136
- #execute :find, src_wp_content_dir, '-print0', '|', 'perl', '-n0e', '\'chomp; print $_, "\n" if /[[:^ascii:][:cntrl:]]/\''
137
-
138
- # src directory (--files-from values are relative to this src directory)
139
- rsync_params << src_wp_content_dir
140
- # dest directory
141
- rsync_params << fetch(:wp_content_path) + '/'
142
-
143
- puts 'Copying wp-content. This may take a while for sites with a lot of uploads...'
144
-
145
- puts 'rsync args:'
146
- puts rsync_params.join(' ')
147
-
148
- # begin
149
- execute :rsync, *rsync_params
150
- # rescue
151
- # puts '--- Rsync failed, but will continue with deployment anyway!'
152
- # end
153
-
154
- # clean up path_to_list_of_files_to_copy file
155
- execute :rm, path_to_list_of_files_to_copy
156
-
157
- # Next, create symlinks to repo-managed plugins and themes, which will also recreate plugins, mu-plugins, and themes directories
158
-
159
- within fetch(:wp_docroot) do
160
- # Regenerate symlinks
161
- invoke! 'cul:wp:symlink_custom_plugins_and_themes'
162
- end
163
-
164
- # Now it's time to copy the database
165
-
166
- db_export_tempfile_path = ''
167
-
168
- within fetch(:src_wp_docroot) do
169
- # On source WordPress...
170
-
171
- puts 'Exporting database from source site. This may take a while for large sites...'
172
- # Export source WP DB to a temporary file
173
- db_export_tempfile_path = Dir::Tmpname.make_tmpname '/tmp/', 'db_export_tempfile.sql'
174
- execute :wp, (fetch(:multisite, false) ? "--url=#{fetch(:source_site_multisite_url)}" : ''), 'db', 'export', db_export_tempfile_path
175
- end
176
-
177
- within fetch(:wp_docroot) do
178
- # On destination WordPress...
179
-
180
- puts 'Importing database. This may take a while for large sites...'
181
-
182
- # Drop all tables
183
- execute :wp, 'db', 'reset', '--yes'
184
-
185
- # Read in db file
186
- execute :wp, 'db', 'import', db_export_tempfile_path
187
-
188
- # Delete db file now that we're done with it
189
- execute :rm, db_export_tempfile_path
190
-
191
- # Invoke searchreplace task to update URL
192
- puts "\nYou'll probably want to run the cul:wp:searchreplace command now, since it's likely that your WP URL differs between environments."
193
- puts "Do you want to run a search and replace operation?"
194
- set :confirm_searchreplace, ask('"y" or "yes" to continue')
195
- if ['y', 'yes'].include?(fetch(:confirm_searchreplace))
196
- invoke 'cul:wp:searchreplace'
197
- else
198
- puts '- Skipping search and replace because neither "y" nor "yes" were entered.'
199
- end
200
- end
201
-
202
- # Next, install all plugins and themes from src wordpress, matching all versions and active vs. inactive plugin and theme states
203
-
204
- data_for_plugins = []
205
- data_for_themes = []
206
-
207
- # Within src wp instance, get list of all plugins and themes with version
208
- within File.join(fetch(:src_wp_docroot)) do
209
- data_for_plugins = JSON.parse(capture(:wp, (fetch(:multisite, false) ? "--url=#{fetch(:source_site_multisite_url)}" : ''), 'plugin', 'list', '--fields=name,version,status', '--format=json'))
210
- data_for_themes = JSON.parse(capture(:wp, (fetch(:multisite, false) ? "--url=#{fetch(:source_site_multisite_url)}" : ''), 'theme', 'list', '--fields=name,version,status', '--format=json'))
211
- end
212
-
213
- # Within dest wp instance, install specifically versioned plugins and themes
214
- within File.join(fetch(:wp_docroot)) do
215
- # Get list of repo-managed plugins and themes so that we don't attempt to overwrite these directories
216
- repo_managed_plugin_names = fetch(:wp_custom_plugins, {}).keys
217
- repo_managed_theme_names = fetch(:wp_custom_themes, {}).keys
218
-
219
- puts "Downloading new copies of non-repo-managed plugins and themes..."
220
-
221
- data_for_plugins.delete_if{|plugin_info| repo_managed_plugin_names.include?(plugin_info['name']) }.each do |plugin_info|
222
- name = plugin_info['name']
223
- version = plugin_info['version']
224
- status = plugin_info['status']
225
-
226
- case status
227
- when 'active'
228
- execute :wp, (fetch(:multisite, false) ? "--url=#{fetch(:destination_site_multisite_url)}" : ''), 'plugin', 'install', name, "--version=#{version}", '--activate'
229
- when 'active-network'
230
- execute :wp, (fetch(:multisite, false) ? "--url=#{fetch(:destination_site_multisite_url)}" : ''), 'plugin', 'install', name, "--version=#{version}", '--activate-network'
231
- when 'inactive'
232
- execute :wp, (fetch(:multisite, false) ? "--url=#{fetch(:destination_site_multisite_url)}" : ''), 'plugin', 'install', name, "--version=#{version}"
233
- when 'must-use'
234
- puts "--- WARNING: must-use plugin #{name} was not migrated over. It should be put in your blog's repository and deployed through a regular deployment."
235
- end
236
- end
237
-
238
- data_for_themes.delete_if{|theme_info| repo_managed_theme_names.include?(theme_info['name']) }.each do |theme_info|
239
- name = theme_info['name']
240
- version = theme_info['version']
241
- status = theme_info['status']
242
-
243
- case status
244
- when 'active'
245
- execute :wp, (fetch(:multisite, false) ? "--url=#{fetch(:destination_site_multisite_url)}" : ''), 'theme', 'install', name, "--version=#{version}", '--activate'
246
- when 'inactive', 'parent'
247
- execute :wp, (fetch(:multisite, false) ? "--url=#{fetch(:destination_site_multisite_url)}" : ''), 'theme', 'install', name, "--version=#{version}"
248
- end
249
- end
250
- end
251
-
252
- within fetch(:wp_docroot) do
253
- # Make docroot readable and executable for "other" user so nginx, which runs as "nobody", can read
254
- # Use -L flag because we want to follow symlinks. The whole deployment relies on symlinks.
255
- execute :find, '-L', File.join(fetch(:wp_docroot), 'wp-content'), '-type d -exec chmod o+rx "{}" \;'
256
- execute :find, '-L', File.join(fetch(:wp_docroot), 'wp-content'), '-type f -exec chmod o+r "{}" \;'
257
- # Make sure that wp-config file is not world readable
258
- execute :chmod, 'o-r', shared_path.join('wp-config.php')
259
- end
260
-
261
- end
262
- end
263
-
264
- #after 'cul:wp:migrate:copy_from', 'cul:wp:disable_maintenance_mode'
265
-
266
- end
267
- end
268
- end