wordpresstrano 0.2.2 → 0.2.3

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: 3a39a6ee135372c5de3d06d78771e8165e92948f
4
- data.tar.gz: 03465170ef4519a96e2a4e74b1a39dcc89546128
3
+ metadata.gz: 61fd148512fb3279807ba2e5afaffd510de22b2e
4
+ data.tar.gz: 1dd7e3d9601695732cae56e36beccfafae86f046
5
5
  SHA512:
6
- metadata.gz: f6f2916a978dd401a9dfc46fe7afe3783b8d45396851678fd41d9538f2c8fc51788fb4eedb77fa04e6beff70ca4aea22ad1d3d531279579e8ad3eda415524fad
7
- data.tar.gz: 78528b29a4c75b9fcd73f19b76dec33636f300267e023966c013ff9a234cadf307e5dc8f62d282b616480817c224899df75496a78a7d7d378a994332b57ef824
6
+ metadata.gz: 2e35f1b198560f0a973dd770e8af7c02fa80e96c2310d9879e15fbff30d7ed580d3af4c0bd3a667c9dc038d9e8a6dacb4c7a352929bce5862c904be36fb0edee
7
+ data.tar.gz: 6d8e28ae42045e052d675072c69116593798fa54213837888f57d5663ef87ad16c14fc52030c39b07d62352777b418bc299b9ec1a28d70cc30dc514bd843ef27
@@ -1,38 +1,23 @@
1
- # Check binaries before performing tasks
2
- before "db:backup", "binaries:check"
3
- before "db:create", "binaries:check"
4
- before "db:list_backups", "binaries:check"
5
- before "db:pull", "binaries:check"
6
- before "db:push", "binaries:check"
7
- before "db:reset", "binaries:check"
8
- before "db:restore", "binaries:check"
9
- before "deploy", "binaries:check"
10
- before "htaccess:pull", "binaries:check"
11
- before "htaccess:push", "binaries:check"
12
- before "uploads:pull", "binaries:check"
13
- before "uploads:push", "binaries:check"
14
- before "uploads:setperms", "binaries:check"
15
- before "wp:core:download", "binaries:check"
16
- before "wp:core:remove", "binaries:check"
17
-
18
- # Check directories before performing tasks
19
- before "config:generate", "deploy:check:directories"
20
- before "db:backup", "deploy:check:directories"
21
- before "db:create", "deploy:check:directories"
22
- before "db:list_backups", "deploy:check:directories"
23
- before "db:pull", "deploy:check:directories"
24
- before "db:push", "deploy:check:directories"
25
- before "db:reset", "deploy:check:directories"
26
- before "db:restore", "deploy:check:directories"
27
- before "deploy:shared_configs", "deploy:check:directories"
28
- before "htaccess:pull", "deploy:check:directories"
29
- before "htaccess:push", "deploy:check:directories"
30
- before "robots:generate", "deploy:check:directories"
31
- before "uploads:pull", "deploy:check:directories"
32
- before "uploads:push", "deploy:check:directories"
1
+ # Perform a safety check before running tasks
2
+ before "config:generate", "deploy:safety_check"
3
+ before "db:backup", "deploy:safety_check"
4
+ before "db:create", "deploy:safety_check"
5
+ before "db:list_backups", "deploy:safety_check"
6
+ before "db:push", "deploy:safety_check"
7
+ before "db:reset", "deploy:safety_check"
8
+ before "db:restore", "deploy:safety_check"
9
+ before "deploy", "deploy:safety_check"
10
+ before "deploy:all", "deploy:safety_check"
11
+ before "deploy:configs", "deploy:safety_check"
12
+ before "htaccess:push", "deploy:safety_check"
13
+ before "robots:generate", "deploy:safety_check"
14
+ before "uploads:push", "deploy:safety_check"
15
+ before "uploads:setperms", "deploy:safety_check"
16
+ before "wp:core:download", "deploy:safety_check"
17
+ before "wp:core:remove", "deploy:safety_check"
33
18
 
34
19
  # Check if maintenance mode should be enabled before pushing the database
35
- before "db:push", "db:check_maintenance_enable"
20
+ before "db:push", "maintenance:enable_if_previous_deployment"
36
21
 
37
22
  # Create the MySQL database before pushing content to it
38
23
  before "db:push", "db:create"
@@ -41,31 +26,33 @@ before "db:push", "db:create"
41
26
  before "db:push", "db:backup"
42
27
 
43
28
  # Check if maintenance mode should be enabled before restoring the database
44
- before "db:restore", "db:check_maintenance_enable"
29
+ before "db:restore", "maintenance:enable_if_previous_deployment"
45
30
 
46
31
  # Create the database before restoring
47
32
  before "db:restore", "db:create"
48
33
 
49
- # Deploy shared configuration files before deploying
50
- before "deploy", "deploy:shared_configs"
34
+ # Check if there is a previous deployment before performing
35
+ # a partial deployment.
36
+ before "deploy", "deploy:check_for_previous_deployment"
37
+
38
+ # Set the timestamp to be used by the db:backup task
39
+ before "deploy:all", "db:match_backup_timestamp_with_release"
40
+ before "deploy:rollback", "db:match_backup_timestamp_with_release"
51
41
 
52
42
  # Move the database backup from the release we rolled away from
53
43
  # into the release's root before it's archived
54
44
  before "deploy:cleanup_rollback", "db:cleanup_rollback_database"
55
45
 
46
+ # Remove the existing WordPress core before downloading a new one
47
+ before "wp:core:download", "wp:core:remove"
48
+
56
49
  # Load the local WordPress version so that when downloading the
57
50
  # WordPress core on a remote server, the version matches the local installation.
58
51
  before "deploy:updated", "wp:core:load_local_version"
59
52
 
60
- # Remove the existing WordPress core before downloading a new one
61
- before "wp:core:download", "wp:core:remove"
62
-
63
53
  # Download the WordPress core files before finishing deploy:updated
64
54
  before "deploy:updated", "wp:core:download"
65
55
 
66
- # Check if we can deploy without pushing htaccess/uploads/database
67
- before "deploy", "deploy:check_for_previous_deployment"
68
-
69
56
  # Link the release into the website root
70
57
  after "deploy:finished", "webroot:symlink"
71
58
 
@@ -86,10 +73,10 @@ after "uploads:push", "uploads:setperms"
86
73
  after "deploy:finished", "webroot:setperms"
87
74
 
88
75
  # Check if maintenance mode should be disabled after pushing the database
89
- after "db:push", "db:check_maintenance_disable"
76
+ after "db:push", "maintenance:disable_if_previous_deployment"
90
77
 
91
78
  # Check if maintenance mode should be disabled after restoring the database
92
- after "db:restore", "db:check_maintenance_disable"
79
+ after "db:restore", "maintenance:disable_if_previous_deployment"
93
80
 
94
81
  # Rollback the database after rolling back the files
95
82
  after "deploy:reverted", "db:rollback"
@@ -1,31 +1,25 @@
1
1
  namespace :binaries do
2
2
  desc "Check that all required binaries are installed"
3
3
  task :check do
4
- next if true == fetch(:checked_binaries)
4
+ next if fetch(:checked_binaries, false)
5
5
 
6
6
  required_binaries = {
7
7
  local: [:mysql, :mysqldump, :mysqlshow, :php, :rm, :rsync, :wp],
8
- remote: {
9
- :all => [:chmod, :find, :mysql, :mysqldump, :mysqlshow, :rm, :wp],
10
- :app => [:ln, :readlink, :rsync],
11
- :db => [:du, :grep]
12
- }
8
+ remote: [:chmod, :du, :find, :grep, :ln, :mysql, :mysqldump, :mysqlshow, :readlink, :rm, :rsync, :wp]
13
9
  }
14
-
15
- run_locally do
16
- required_binaries[:local].each do |binary|
10
+
11
+ required_binaries[:local].each do |binary|
12
+ run_locally do
17
13
  unless test :which, binary
18
14
  abort "The binary '#{binary}' is missing from the local system"
19
15
  end
20
16
  end
21
17
  end
22
18
 
23
- required_binaries[:remote].each do |role, binaries|
24
- on roles(role) do |server|
25
- binaries.each do |binary|
26
- unless test :which, binary
27
- abort "The binary '#{binary}' is missing from #{server.user}@#{server.hostname}"
28
- end
19
+ required_binaries[:remote].each do |binary|
20
+ on roles(:app) do |server|
21
+ unless test :which, binary
22
+ abort "The binary '#{binary}' is missing from #{server.user}@#{server.hostname}"
29
23
  end
30
24
  end
31
25
  end
@@ -1,65 +1,4 @@
1
1
  namespace :db do
2
- desc "Pull down the WordPress database"
3
- task :pull do
4
- file = "#{SecureRandom.hex(8)}.sql"
5
-
6
- local_path = File.join(Dir.pwd, file)
7
- remote_path = File.join(fetch(:tmp_dir), file)
8
-
9
- next if 0 == roles(:db).count
10
-
11
- if 1 < roles(:db).count
12
- run_locally do
13
- info "Found #{roles(:db).count} database servers"
14
-
15
- roles(:db).each_with_index do |server, index|
16
- info "#{index + 1}) #{server.user}@#{server.hostname} (Port #{server.port or 22})"
17
- end
18
-
19
- set :database_pull_server, ask("the number of the server to pull the database from", "1")
20
- end
21
- else
22
- set :database_pull_server, "1"
23
- end
24
-
25
- database_pull_server = fetch(:database_pull_server).to_i
26
-
27
- if 1 > database_pull_server or roles(:db).count < database_pull_server
28
- run_locally do
29
- error "Unable to locate a server with an id '#{database_pull_server}'"
30
- end
31
-
32
- next
33
- end
34
-
35
- database_pull_server = roles(:db)[database_pull_server - 1]
36
-
37
- on roles(:db) do |server|
38
- next unless server.matches? database_pull_server
39
-
40
- info "Pulling WordPress database from #{server.user}@#{server.hostname}"
41
-
42
- within release_path do
43
- execute :wp, "db", "export", remote_path
44
- end
45
-
46
- download! remote_path, local_path
47
-
48
- execute :rm, "-f", remote_path
49
-
50
- run_locally do
51
- execute :wp, "db", "import", local_path
52
- execute :rm, "-f", local_path
53
-
54
- if fetch(:local_site_url) and fetch(:site_url)
55
- execute :wp, "search-replace", fetch(:site_url), fetch(:local_site_url)
56
- end
57
- end
58
- end
59
-
60
- set :database_pull_server, nil
61
- end
62
-
63
2
  desc "Push up the WordPress database"
64
3
  task :push do
65
4
  file = "#{SecureRandom.hex(8)}.sql"
@@ -67,11 +6,11 @@ namespace :db do
67
6
  local_path = File.join(Dir.pwd, file)
68
7
  remote_path = File.join(fetch(:tmp_dir), file)
69
8
 
70
- on roles(:db) do |server|
9
+ on roles(:app) do |server|
71
10
  info "Pushing WordPress database to #{server.user}@#{server.hostname}"
72
11
 
73
12
  run_locally do
74
- execute :wp, "db", "export", local_path
13
+ execute :wp, :db, :export, local_path
75
14
  end
76
15
 
77
16
  upload! local_path, remote_path
@@ -81,7 +20,7 @@ namespace :db do
81
20
  end
82
21
 
83
22
  within release_path do
84
- execute :wp, "db", "import", remote_path
23
+ execute :wp, :db, :import, remote_path
85
24
  execute :rm, "-f", remote_path
86
25
 
87
26
  if fetch(:local_site_url) and fetch(:site_url)
@@ -104,17 +43,17 @@ namespace :db do
104
43
  database_username = database_config[:username]
105
44
  database_password = database_config[:password]
106
45
 
107
- on roles(:db) do |server|
46
+ on roles(:app) do |server|
108
47
  within release_path do
109
48
  if test("[ \"#{database_name}\" == $(mysqlshow --user=\"#{database_username}\" --password=\"#{database_password}\" #{database_name} | grep -v Wildcard | grep -o #{database_name}) ]")
110
- info "The MySQL database already exists on #{server.user}@#{server.hostname}"
49
+ error "The MySQL database already exists on #{server.user}@#{server.hostname}"
111
50
 
112
51
  next
113
52
  end
114
53
 
115
54
  info "Creating MySQL database on #{server.user}@#{server.hostname}"
116
55
 
117
- execute :wp, "db", "create"
56
+ execute :wp, :db, :create
118
57
  end
119
58
  end
120
59
  end
@@ -132,34 +71,34 @@ namespace :db do
132
71
  database_username = database_config[:username]
133
72
  database_password = database_config[:password]
134
73
 
135
- on roles(:db) do |server|
74
+ on roles(:app) do |server|
136
75
  within release_path do
137
76
  unless test("[ \"#{database_name}\" == $(mysqlshow --user=\"#{database_username}\" --password=\"#{database_password}\" #{database_name} | grep -v Wildcard | grep -o #{database_name}) ]")
138
- info "The MySQL database does not exist on #{server.user}@#{server.hostname}"
77
+ error "The MySQL database does not exist on #{server.user}@#{server.hostname}"
139
78
 
140
79
  next
141
80
  end
142
81
 
143
82
  info "Deleting MySQL database on #{server.user}@#{server.hostname}"
144
83
 
145
- execute :wp, "db", "drop", "--yes"
84
+ execute :wp, :db, :drop, "--yes"
146
85
  end
147
86
  end
148
87
  end
149
88
 
150
89
  desc "Reset the MySQL database"
151
90
  task :reset do
152
- on roles(:db) do |server|
91
+ on roles(:app) do |server|
153
92
  within release_path do
154
- unless test :wp, "core", "is-installed"
155
- info "The WordPress database does not appear to be installed on #{server.user}@#{server.hostname}"
93
+ unless test :wp, :core, "is-installed"
94
+ error "The WordPress database does not appear to be installed on #{server.user}@#{server.hostname}"
156
95
 
157
96
  next
158
97
  end
159
98
 
160
99
  info "Resetting the WordPress database on #{server.user}@#{server.hostname}"
161
100
 
162
- execute :wp, "db", "reset", "--yes"
101
+ execute :wp, :db, :reset, "--yes"
163
102
  end
164
103
  end
165
104
  end
@@ -168,14 +107,13 @@ namespace :db do
168
107
  task :backup do
169
108
  backups_directory = File.join(fetch(:deploy_to), "backups", "database")
170
109
 
171
- on roles(:db) do |server|
110
+ on roles(:app) do |server|
172
111
  next unless test("[ -d #{current_path} ]")
173
112
 
174
- actual_current_path = capture("readlink -f #{current_path}").strip
113
+ timestamp = fetch(:db_backup_timestamp, Time.now.strftime("%Y%m%d%H%M%S"))
114
+
115
+ file = "#{timestamp}.sql"
175
116
 
176
- file = File.basename(actual_current_path)
177
- file = "#{file}.sql"
178
-
179
117
  remote_path = File.join(backups_directory, file)
180
118
 
181
119
  info "Backing up WordPress database on #{server.user}@#{server.hostname}"
@@ -187,7 +125,7 @@ namespace :db do
187
125
  end
188
126
 
189
127
  within release_path do
190
- execute :wp, "db", "export", remote_path
128
+ execute :wp, :db, :export, remote_path
191
129
  end
192
130
  end
193
131
  end
@@ -196,44 +134,42 @@ namespace :db do
196
134
  task :restore do
197
135
  backups_directory = File.join(fetch(:deploy_to), "backups", "database")
198
136
 
199
- backup_id = fetch(:rollback_timestamp, ENV["id"])
137
+ backup_id = fetch(:db_restore_timestamp, ENV['id'])
200
138
 
201
139
  unless backup_id
202
140
  run_locally do
203
- info "No backup id provided to restore database backup"
141
+ error "You must provide the ID of the backup to restore!"
204
142
  end
205
143
 
206
144
  next
207
145
  end
208
146
 
209
- on roles(:db) do |server|
147
+ on roles(:app) do |server|
210
148
  file = "#{backup_id}.sql"
211
149
 
212
150
  remote_path = File.join(backups_directory, file)
213
151
 
214
152
  unless test("[ -f #{remote_path} ]")
215
- info "Could not find database backup #{backup_id} on #{server.user}@#{server.hostname}"
153
+ info "No database backup found for the id '#{backup_id}' on #{server.user}@#{server.hostname}"
216
154
 
217
155
  next
218
156
  end
219
157
 
220
- info "Restoring WordPress database #{backup_id} on #{server.user}@#{server.hostname}"
158
+ info "Rolling back the database to '#{backup_id}' on #{server.user}@#{server.hostname}"
221
159
 
222
160
  within release_path do
223
- execute :wp, "db", "import", remote_path
161
+ execute :wp, :db, :import, remote_path
224
162
  end
225
163
  end
226
164
  end
227
165
 
228
166
  desc "List all WordPress database backups"
229
167
  task :list_backups do
230
- on roles(:db) do |server|
231
- next unless server.matches? roles(:db).first # Hack to make sure we run only once
232
-
168
+ on roles(:app) do |server|
233
169
  backups_directory = File.join(fetch(:deploy_to), "backups", "database")
234
170
 
235
171
  unless test("[ -d #{backups_directory} ]")
236
- info "No database backups found"
172
+ error "No database backups found on #{server.user}@#{server.hostname}"
237
173
 
238
174
  next
239
175
  end
@@ -241,16 +177,12 @@ namespace :db do
241
177
  backup_paths = capture("find #{backups_directory} -name '*.sql' -maxdepth 1")
242
178
 
243
179
  if backup_paths.nil? or backup_paths.empty?
244
- info "No database backups found"
180
+ error "No database backups found on #{server.user}@#{server.hostname}"
245
181
 
246
182
  next
247
183
  end
248
184
 
249
- if 1 == backup_paths.lines.count
250
- info "Found 1 database backup"
251
- else
252
- info "Found #{backup_paths.lines.count} database backups"
253
- end
185
+ info "Found #{backup_paths.lines.count} database backup(s) on #{server.user}@#{server.hostname}"
254
186
 
255
187
  backup_paths.each_line do |backup_path|
256
188
  backup_path = backup_path.strip
@@ -273,9 +205,7 @@ namespace :db do
273
205
  actual_current_path = nil
274
206
  actual_release_path = nil
275
207
 
276
- on roles(:db) do |server|
277
- next unless server.matches? roles(:db).first # Hack to make sure we run only once
278
-
208
+ on roles(:app) do |server|
279
209
  actual_current_path = capture("readlink -f #{current_path}").strip
280
210
  actual_release_path = capture("readlink -f #{release_path}").strip
281
211
  end
@@ -288,68 +218,46 @@ namespace :db do
288
218
  next
289
219
  end
290
220
 
221
+ set :db_restore_timestamp, File.basename(actual_release_path)
222
+
291
223
  invoke 'db:backup'
292
224
  invoke 'db:restore'
293
-
294
- set :rollback_from_timestamp, File.basename(actual_current_path)
295
225
  end
296
226
 
297
227
  # Move the database backup from the release we rolled away from
298
228
  # into the release's root before it's archived
299
229
  task :cleanup_rollback_database do
300
- rollback_from_timestamp = fetch(:rollback_from_timestamp)
230
+ db_backup_timestamp = fetch(:db_backup_timestamp)
301
231
 
302
- unless :rollback_from_timestamp
303
- run_locally do
304
- error "No timestamp set for the release we rolled away from"
305
- end
306
-
307
- next
308
- end
232
+ next unless db_backup_timestamp
309
233
 
310
- file = "#{rollback_from_timestamp}.sql"
234
+ file = "database.sql"
311
235
 
312
236
  backups_directory = File.join(fetch(:deploy_to), "backups", "database")
313
237
 
314
238
  source_path = File.join(backups_directory, file)
315
- destination_path = File.join(releases_path, rollback_from_timestamp, file)
239
+ destination_path = File.join(releases_path, db_backup_timestamp, file)
316
240
 
317
- on roles(:db) do |server|
241
+ on roles(:app) do |server|
318
242
  unless test("[ -f #{source_path} ]")
319
- error "The database backup file does not exist on #{server.user}@#{server.hostname}"
243
+ error "The database backup (#{db_backup_timestamp}) does not exist on #{server.user}@#{server.hostname}"
320
244
 
321
245
  next
322
246
  end
323
247
 
324
- info "Moving database backup #{rollback_from_timestamp} into release on #{server.user}@#{server.hostname}"
248
+ info "Moving database backup #{db_backup_timestamp} into release on #{server.user}@#{server.hostname}"
325
249
 
326
250
  execute :mv, source_path, destination_path
327
251
  end
328
252
  end
329
253
 
330
- # Enable maintenance mode if WordPress is already installed (used by db:push)
331
- task :check_maintenance_enable do
332
- maintenance_path = File.join(current_path, ".maintenance")
333
-
334
- on roles(:db) do
335
- next unless test("[ -d #{current_path} ]")
336
- next if test("[ -f #{maintenance_path} ]")
337
- next if true == fetch(:db_enabled_maintenance_mode)
338
-
339
- within current_path do
340
- if test :wp, "core", "is-installed"
341
- set :db_enabled_maintenance_mode, true
342
-
343
- invoke 'maintenance:enable'
344
- end
254
+ # Set the timestamp for the backup task to match
255
+ # the timestamp of the current release.
256
+ task :match_backup_timestamp_with_release do
257
+ on roles(:app) do
258
+ if test("[ -d #{current_path} ]")
259
+ set :db_backup_timestamp, File.basename(capture("readlink -f #{current_path}").strip)
345
260
  end
346
261
  end
347
262
  end
348
-
349
- # Disable maintenance mode if it was enabled by check_maintenance_enable
350
- task :check_maintenance_disable do
351
- next unless true == fetch(:db_enabled_maintenance_mode)
352
-
353
- invoke 'maintenance:disable'
354
- end
355
263
  end
@@ -1,8 +1,11 @@
1
1
  namespace :deploy do
2
+ desc "Deploy all resources to the remote servers"
2
3
  task :all do
3
4
  Rake::Task["deploy"].prerequisites.delete("deploy:check_for_previous_deployment")
4
5
  Rake::Task["deploy:updated"].prerequisites.delete("htaccess:clone_from_previous_release")
5
6
 
7
+ before "deploy", "deploy:configs"
8
+
6
9
  after "deploy:updated", "htaccess:push"
7
10
  after "deploy:updated", "uploads:push"
8
11
  after "deploy:updated", "db:push"
@@ -10,23 +13,8 @@ namespace :deploy do
10
13
  invoke "deploy"
11
14
  end
12
15
 
13
- task :check_for_previous_deployment do
14
- previous_deployment = true
15
-
16
- on roles(:all) do |server|
17
- unless test("[ -d #{current_path} ]")
18
- error "Unable to locate a current release on #{server.user}@#{server.hostname}"
19
-
20
- previous_deployment = false
21
- end
22
- end
23
-
24
- unless previous_deployment
25
- raise "One or more servers don't have a current release on them. You should run 'deploy:all' first."
26
- end
27
- end
28
-
29
- task :shared_configs do
16
+ desc "Deploy the wp-config.php and robots.txt configuration files"
17
+ task :configs do
30
18
  config_path = File.join(shared_path, "wp-config.php")
31
19
  robots_path = File.join(shared_path, "robots.txt")
32
20
 
@@ -41,11 +29,47 @@ namespace :deploy do
41
29
  end
42
30
  end
43
31
 
32
+ desc "Perform a safety check"
33
+ task :safety_check do
34
+ unless fetch(:website_root)
35
+ raise "You must set the :website_root variable in your deployment configuration!"
36
+ end
37
+
38
+ if 1 < roles(:app).count
39
+ raise "You can't deploy to more than one server!"
40
+ end
41
+
42
+ invoke "binaries:check"
43
+ invoke "deploy:check:directories"
44
+ end
45
+
46
+ desc "Touch the most recent release directory on the remote servers"
44
47
  task :touch_release do
45
48
  on roles(:app) do |server|
46
- info "Touching release directory on #{server.user}@#{server.hostname}"
47
-
48
- execute :touch, release_path
49
+ if test("[ -d #{release_path} ]")
50
+ info "Touching release directory on #{server.user}@#{server.hostname}"
51
+
52
+ execute :touch, release_path
53
+ else
54
+ error "No release directory found on #{server.user}@#{server.hostname}"
55
+ end
56
+ end
57
+ end
58
+
59
+ # Check if a previous deployment exists on the remote servers.
60
+ # If one or more servers don't have a release on them, we should
61
+ # raise an error.
62
+ task :check_for_previous_deployment do
63
+ on roles(:app) do |server|
64
+ unless test("[ -d #{current_path} ]")
65
+ error "No releases found on #{server.user}@#{server.hostname}"
66
+
67
+ set :all_servers_have_deployments, false
68
+ end
69
+ end
70
+
71
+ unless fetch(:all_servers_have_deployments, true)
72
+ raise "You need to run the 'deploy:all' task first!"
49
73
  end
50
74
  end
51
75
  end
@@ -1,74 +1,4 @@
1
1
  namespace :htaccess do
2
- desc "Pull down the .htaccess file"
3
- task :pull do
4
- file = ".htaccess"
5
-
6
- remote_file = File.join(release_path, file)
7
-
8
- next if 0 == roles(:app).count
9
-
10
- if 1 < roles(:app).count
11
- run_locally do
12
- info "Found #{roles(:app).count} application servers"
13
-
14
- roles(:app).each_with_index do |server, index|
15
- info "#{index + 1}) #{server.user}@#{server.hostname} (Port #{server.port or 22})"
16
- end
17
-
18
- set :htaccess_pull_server, ask("the number of the server to pull the #{file} file from", "1")
19
- end
20
- else
21
- set :htaccess_pull_server, "1"
22
- end
23
-
24
- htaccess_pull_server = fetch(:htaccess_pull_server).to_i
25
-
26
- if 1 > htaccess_pull_server or roles(:app).count < htaccess_pull_server
27
- run_locally do
28
- error "Unable to locate a server with an id '#{htaccess_pull_server}'"
29
- end
30
-
31
- next
32
- end
33
-
34
- htaccess_pull_server = roles(:app)[htaccess_pull_server - 1]
35
-
36
- on roles(:app) do |server|
37
- next unless server.matches? htaccess_pull_server
38
-
39
- unless test("[ -f #{remote_file} ]")
40
- error "There isn't a #{file} file on #{server.user}@#{server.hostname}"
41
-
42
- next
43
- end
44
-
45
- if File.file? file
46
- local_sha256sum = Digest::SHA256.hexdigest(File.read(file))
47
- remote_sha256sum = capture("sha256sum #{remote_file}").split(' ').first
48
-
49
- if local_sha256sum == remote_sha256sum
50
- info "No changes detected in #{file} file on #{server.user}@#{server.hostname}"
51
-
52
- next
53
- end
54
-
55
- unless fetch(:confirm_pull_htaccess)
56
- set :confirm_pull_htaccess, ask("confirmation for local #{file} file overwrite", "Y/n")
57
- end
58
-
59
- next unless [true, "y", "yes"].include? fetch(:confirm_pull_htaccess).downcase
60
- end
61
-
62
- info "Pulling #{file} file from #{server.user}@#{server.hostname}"
63
-
64
- download! remote_file, file
65
-
66
- break
67
- end
68
-
69
- set :htaccess_pull_server, nil
70
- end
71
-
72
2
  desc "Push up the .htaccess file"
73
3
  task :push do
74
4
  file = ".htaccess"
@@ -65,4 +65,29 @@ namespace :maintenance do
65
65
  execute :rm, "-f", remote_path
66
66
  end
67
67
  end
68
+
69
+ # Enable maintenance mode if there is already a WordPress deployment.
70
+ task :enable_if_previous_deployment do
71
+ maintenance_path = File.join(current_path, ".maintenance")
72
+
73
+ on roles(:app) do
74
+ next unless test("[ -d #{current_path} ]")
75
+ next if test("[ -f #{maintenance_path} ]")
76
+
77
+ within current_path do
78
+ if test :wp, :core, "is-installed"
79
+ set :previous_deployment_maintenance_enabled, true
80
+
81
+ invoke 'maintenance:enable'
82
+ end
83
+ end
84
+ end
85
+ end
86
+
87
+ # Disable maintenance mode if it was enabled by the :enable_if_previous_deployment task.
88
+ task :disable_if_previous_deployment do
89
+ next unless true == fetch(:previous_deployment_maintenance_enabled)
90
+
91
+ invoke 'maintenance:disable'
92
+ end
68
93
  end
@@ -1,65 +1,4 @@
1
1
  namespace :uploads do
2
- desc "Pull down the uploads directory"
3
- task :pull do
4
- directory = File.join("wp-content", "uploads")
5
-
6
- local_path = File.join(Dir.pwd, directory)
7
- remote_path = File.join(release_path, directory)
8
-
9
- next if 0 == roles(:app).count
10
-
11
- if 1 < roles(:app).count
12
- run_locally do
13
- info "Found #{roles(:app).count} application servers"
14
-
15
- roles(:app).each_with_index do |server, index|
16
- info "#{index + 1}) #{server.user}@#{server.hostname} (Port #{server.port or 22})"
17
- end
18
-
19
- set :uploads_pull_server, ask("the number of the server to pull the #{directory} directory from", "1")
20
- end
21
- else
22
- set :uploads_pull_server, "1"
23
- end
24
-
25
- uploads_pull_server = fetch(:uploads_pull_server).to_i
26
-
27
- if 1 > uploads_pull_server or roles(:app).count < uploads_pull_server
28
- run_locally do
29
- error "Unable to locate a server with an id '#{uploads_pull_server}'"
30
- end
31
-
32
- next
33
- end
34
-
35
- uploads_pull_server = roles(:app)[uploads_pull_server - 1]
36
-
37
- on roles(:app) do |server|
38
- next unless server.matches? uploads_pull_server
39
-
40
- unless test("[ -d #{remote_path} ]")
41
- error "There isn't a #{directory} directory on #{server.user}@#{server.hostname}"
42
-
43
- next
44
- end
45
-
46
- run_locally do
47
- execute :mkdir, "-p", local_path
48
- end
49
-
50
- info "Pulling #{directory} directory from #{server.user}@#{server.hostname}"
51
-
52
- # Fix for rsync
53
- remote_path += "/"
54
-
55
- run_locally do
56
- execute :rsync, "-lrtvzO", "--delete-before", (server.port ? "-e 'ssh -p #{server.port}'" : nil), "#{server.user}@#{server.hostname}:#{remote_path}", local_path
57
- end
58
- end
59
-
60
- set :uploads_pull_server, nil
61
- end
62
-
63
2
  desc "Push up the uploads directory"
64
3
  task :push do
65
4
  directory = File.join("wp-content", "uploads")
@@ -1,6 +1,6 @@
1
1
  Gem::Specification.new do |s|
2
2
  s.name = 'wordpresstrano'
3
- s.version = '0.2.2'
3
+ s.version = '0.2.3'
4
4
  s.date = '2015-08-09'
5
5
  s.authors = ['Nialto Services']
6
6
  s.email = 'support@nialtoservices.co.uk'
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: wordpresstrano
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.2.2
4
+ version: 0.2.3
5
5
  platform: ruby
6
6
  authors:
7
7
  - Nialto Services