capistrano-django 3.4.1 → 3.5.0

Sign up to get free protection for your applications and to get access to all the features.
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