capistrano-django 3.4.1 → 3.5.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.
- checksums.yaml +4 -4
- data/lib/capistrano/django.rb +78 -0
- metadata +2 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 7a45dcd0d99df2f919e5efab4682a3e850c359e9
|
4
|
+
data.tar.gz: c0fa31ca82418fd79dc8871b80b89b7bb723c779
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: c633854c032ef4a745f46aeb3a15fe97e55cc4a442cd102a5fed962b0b07d8eae829e15257d6af0575eaac33eb800cd16c20192c9aca9fb7dd14bea3f4549766
|
7
|
+
data.tar.gz: c9e06e6d1460643ce68fad39256ad1ce1f537a75cdb9974effb423abe35b6b5552581910e8d782c54a39d72018e5cd8e26d0ad2f049e0e15f7d24f67f81dd99b
|
data/lib/capistrano/django.rb
CHANGED
@@ -144,6 +144,10 @@ namespace :django do
|
|
144
144
|
|
145
145
|
desc "Run django's collectstatic"
|
146
146
|
task :collectstatic do
|
147
|
+
if fetch(:create_s3_bucket)
|
148
|
+
invoke 's3:create_bucket'
|
149
|
+
end
|
150
|
+
|
147
151
|
django("collectstatic", "-i *.coffee -i *.less -i node_modules/* -i bower_components/* --noinput --clear")
|
148
152
|
end
|
149
153
|
|
@@ -200,3 +204,77 @@ namespace :nodejs do
|
|
200
204
|
end
|
201
205
|
|
202
206
|
end
|
207
|
+
|
208
|
+
|
209
|
+
before 'deploy:cleanup', 's3:cleanup'
|
210
|
+
|
211
|
+
namespace :s3 do
|
212
|
+
|
213
|
+
desc 'Clean up old s3 buckets'
|
214
|
+
task :cleanup do
|
215
|
+
if fetch(:create_s3_bucket)
|
216
|
+
on roles(:web) do
|
217
|
+
releases = capture(:ls, '-xtr', releases_path).split
|
218
|
+
if releases.count >= fetch(:keep_releases)
|
219
|
+
directories = releases.last(fetch(:keep_releases))
|
220
|
+
require 'fog'
|
221
|
+
storage = Fog::Storage.new({
|
222
|
+
aws_access_key_id: fetch(:aws_access_key),
|
223
|
+
aws_secret_access_key: fetch(:aws_secret_key),
|
224
|
+
provider: "AWS"
|
225
|
+
})
|
226
|
+
buckets = storage.directories.all.select { |b| b.key.start_with? fetch(:s3_bucket_prefix) }
|
227
|
+
buckets = buckets.select { |b| not directories.include?(b.key.split('-').last) }
|
228
|
+
buckets.each do |old_bucket|
|
229
|
+
files = old_bucket.files.map{ |file| file.key }
|
230
|
+
storage.delete_multiple_objects(old_bucket.key, files) unless files.empty?
|
231
|
+
storage.delete_bucket(old_bucket.key)
|
232
|
+
end
|
233
|
+
end
|
234
|
+
end
|
235
|
+
end
|
236
|
+
end
|
237
|
+
|
238
|
+
desc 'Create a new bucket in s3 to deploy static files to'
|
239
|
+
task :create_bucket do
|
240
|
+
settings_path = File.join(release_path, fetch(:django_settings_dir))
|
241
|
+
s3_settings_path = File.join(settings_path, 's3_settings.py')
|
242
|
+
bucket_name = "#{fetch(:s3_bucket_prefix)}-#{asset_timestamp.sub('.', '')}"
|
243
|
+
|
244
|
+
on roles(:web) do
|
245
|
+
execute %Q|echo "STATIC_URL = 'https://s3.amazonaws.com/#{bucket_name}/'" > #{s3_settings_path}|
|
246
|
+
execute %Q|echo "AWS_ACCESS_KEY_ID = '#{fetch(:aws_access_key)}'" >> #{s3_settings_path}|
|
247
|
+
execute %Q|echo "AWS_SECRET_ACCESS_KEY = '#{fetch(:aws_secret_key)}'" >> #{s3_settings_path}|
|
248
|
+
execute %Q|echo "AWS_STORAGE_BUCKET_NAME = '#{bucket_name}'" >> #{s3_settings_path}|
|
249
|
+
execute %Q|echo 'from .s3_settings import *' >> #{settings_path}/#{fetch(:django_settings)}.py|
|
250
|
+
execute %Q|echo 'STATICFILES_STORAGE = "storages.backends.s3boto.S3BotoStorage"' >> #{settings_path}/#{fetch(:django_settings)}.py|
|
251
|
+
end
|
252
|
+
|
253
|
+
require 'fog'
|
254
|
+
storage = Fog::Storage.new({
|
255
|
+
aws_access_key_id: fetch(:aws_access_key),
|
256
|
+
aws_secret_access_key: fetch(:aws_secret_key),
|
257
|
+
provider: "AWS"
|
258
|
+
})
|
259
|
+
storage.put_bucket(bucket_name)
|
260
|
+
storage.put_bucket_policy(bucket_name, {
|
261
|
+
'Statement' => [{
|
262
|
+
'Sid' => 'AddPerm',
|
263
|
+
'Effect' => 'Allow',
|
264
|
+
'Principal' => '*',
|
265
|
+
'Action' => ['s3:GetObject'],
|
266
|
+
'Resource' => ["arn:aws:s3:::#{bucket_name}/*"]
|
267
|
+
}]
|
268
|
+
})
|
269
|
+
storage.put_bucket_cors(bucket_name, {
|
270
|
+
"CORSConfiguration" => [{
|
271
|
+
"AllowedOrigin" => ["*"],
|
272
|
+
"AllowedHeader" => ["*"],
|
273
|
+
"AllowedMethod" => ["GET"],
|
274
|
+
"MaxAgeSeconds" => 3000
|
275
|
+
}]
|
276
|
+
})
|
277
|
+
|
278
|
+
end
|
279
|
+
|
280
|
+
end
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: capistrano-django
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 3.
|
4
|
+
version: 3.5.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Matthew J. Morrison
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2015-05-
|
11
|
+
date: 2015-05-29 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: capistrano
|