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.
Files changed (3) hide show
  1. checksums.yaml +4 -4
  2. data/lib/capistrano/django.rb +78 -0
  3. metadata +2 -2
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: a4e755239835e0b87438f2d45e7d57c69b2a9425
4
- data.tar.gz: 8839fc9b5c1d1467ef025b5db5ecd2e54cc056b4
3
+ metadata.gz: 7a45dcd0d99df2f919e5efab4682a3e850c359e9
4
+ data.tar.gz: c0fa31ca82418fd79dc8871b80b89b7bb723c779
5
5
  SHA512:
6
- metadata.gz: 97ba954d88b7b6da9a3b756632b3814f53efce250d414527daee01302c6e3155968110e6833c537713190d0b06e9f0c4a5540518e89d1c3ac4330ab088eb46e3
7
- data.tar.gz: 60cbac6c3f69cc5884dba2ad96100f231497d84a351d83a55cd09961ddd7b5acaffc39f29e9c3be8dde20854c5d9c8fb89f6c1fa0f2769163b21c4060100434b
6
+ metadata.gz: c633854c032ef4a745f46aeb3a15fe97e55cc4a442cd102a5fed962b0b07d8eae829e15257d6af0575eaac33eb800cd16c20192c9aca9fb7dd14bea3f4549766
7
+ data.tar.gz: c9e06e6d1460643ce68fad39256ad1ce1f537a75cdb9974effb423abe35b6b5552581910e8d782c54a39d72018e5cd8e26d0ad2f049e0e15f7d24f67f81dd99b
@@ -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.1
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-20 00:00:00.000000000 Z
11
+ date: 2015-05-29 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: capistrano