asset_sync 0.1.8 → 0.1.9
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.
- data/README.md +12 -5
- data/asset_sync.gemspec +2 -2
- data/lib/asset_sync/config.rb +7 -0
- data/lib/asset_sync/storage.rb +37 -4
- data/lib/asset_sync/version.rb +1 -1
- data/lib/generators/asset_sync/templates/asset_sync.rb +4 -1
- data/lib/generators/asset_sync/templates/asset_sync.yml +10 -7
- data/spec/asset_sync_spec.rb +22 -0
- metadata +13 -13
data/README.md
CHANGED
@@ -94,7 +94,7 @@ The generator will create a Rails initializer at `config/initializers/asset_sync
|
|
94
94
|
|
95
95
|
### YAML (config/asset_sync.yml)
|
96
96
|
|
97
|
-
If you used the `--use-yml` flag, the generator will create a YAML file at `config/
|
97
|
+
If you used the `--use-yml` flag, the generator will create a YAML file at `config/asset_sync.yml`.
|
98
98
|
|
99
99
|
defaults: &defaults
|
100
100
|
aws_access_key: "<%= ENV['AWS_ACCESS_KEY'] %>"
|
@@ -136,7 +136,15 @@ Or add to a traditional unix system
|
|
136
136
|
* **aws\_access\_key**: your Amazon S3 access key
|
137
137
|
* **aws\_access\_secret**: your Amazon S3 access secret
|
138
138
|
* **aws\_region**: the region your S3 bucket is in e.g. *eu-west-1*
|
139
|
-
* **
|
139
|
+
* **existing\_remote\_files**: what to do with previously precompiled files, options are **keep** or **delete**
|
140
|
+
* **gzip\_compression**: when enabled, will automatically replace files that have a gzip compressed equivalent with the compressed version.
|
141
|
+
|
142
|
+
## Automatic gzip compression
|
143
|
+
|
144
|
+
With the `gzip_compression` option enabled, when uploading your assets. If a file has a gzip compressed equivalent we will replace that asset with the compressed version and sets the correct headers for S3 to serve it. For example, if you have a file **master.css** and it was compressed to **master.css.gz** we will upload the **.gz** file to S3 in place of the uncompressed file.
|
145
|
+
|
146
|
+
If the compressed file is actually larger than the uncompressed file we will ignore this rule and upload the standard uncompressed version.
|
147
|
+
|
140
148
|
|
141
149
|
## Amazon S3 Multiple Region Support
|
142
150
|
|
@@ -155,10 +163,9 @@ Or via the initializer
|
|
155
163
|
|
156
164
|
## Rake Task
|
157
165
|
|
158
|
-
A rake task is
|
159
|
-
precompile task by automatically running after it:
|
166
|
+
A rake task is included in asset\_sync to enhance the rails precompile task by automatically running after it:
|
160
167
|
|
161
|
-
# lib/tasks/asset_sync.rake
|
168
|
+
# asset_sync/lib/tasks/asset_sync.rake
|
162
169
|
Rake::Task["assets:precompile"].enhance do
|
163
170
|
AssetSync.sync
|
164
171
|
end
|
data/asset_sync.gemspec
CHANGED
@@ -6,12 +6,12 @@ require "asset_sync/version"
|
|
6
6
|
Gem::Specification.new do |s|
|
7
7
|
s.name = "asset_sync"
|
8
8
|
s.version = AssetSync::VERSION
|
9
|
-
s.date = "2011-
|
9
|
+
s.date = "2011-11-05"
|
10
10
|
s.platform = Gem::Platform::RUBY
|
11
11
|
s.authors = ["Simon Hamilton", "David Rice"]
|
12
12
|
s.email = ["shamilton@rumblelabs.com", "me@davidjrice.co.uk"]
|
13
13
|
s.homepage = "https://github.com/rumblelabs/asset_sync"
|
14
|
-
s.summary = %q{Synchronises Assets
|
14
|
+
s.summary = %q{Synchronises Assets in a Rails 3 application and S3/Cloudfront}
|
15
15
|
s.description = %q{After you run assets:precompile your assets will be synchronised with your S3 bucket, deleting unused files and only uploading the files it needs to.}
|
16
16
|
|
17
17
|
s.rubyforge_project = "asset_sync"
|
data/lib/asset_sync/config.rb
CHANGED
@@ -9,6 +9,7 @@ module AssetSync
|
|
9
9
|
attr_accessor :aws_bucket
|
10
10
|
attr_accessor :aws_region
|
11
11
|
attr_accessor :existing_remote_files
|
12
|
+
attr_accessor :gzip_compression
|
12
13
|
|
13
14
|
validates :aws_access_key, :presence => true
|
14
15
|
validates :aws_access_secret, :presence => true
|
@@ -19,9 +20,14 @@ module AssetSync
|
|
19
20
|
self.provider = 'AWS'
|
20
21
|
self.aws_region = nil
|
21
22
|
self.existing_remote_files = 'keep'
|
23
|
+
self.gzip_compression = false
|
22
24
|
load_yml! if yml_exists?
|
23
25
|
end
|
24
26
|
|
27
|
+
def gzip?
|
28
|
+
self.gzip_compression
|
29
|
+
end
|
30
|
+
|
25
31
|
def existing_remote_files?
|
26
32
|
(self.existing_remote_files == "keep")
|
27
33
|
end
|
@@ -45,6 +51,7 @@ module AssetSync
|
|
45
51
|
self.aws_bucket = yml["aws_bucket"] if yml.has_key?("aws_bucket")
|
46
52
|
self.aws_region = yml["aws_region"] if yml.has_key?("aws_region")
|
47
53
|
self.existing_remote_files = yml["existing_remote_files"] if yml.has_key?("existing_remote_files")
|
54
|
+
self.gzip_compression = yml["gzip_compression"] if yml.has_key?("gzip_compression")
|
48
55
|
|
49
56
|
# TODO deprecate old style config settings
|
50
57
|
self.aws_access_key = yml["access_key_id"] if yml.has_key?("access_key_id")
|
data/lib/asset_sync/storage.rb
CHANGED
@@ -54,13 +54,46 @@ module AssetSync
|
|
54
54
|
end
|
55
55
|
|
56
56
|
def upload_file(f)
|
57
|
-
|
58
|
-
file =
|
59
|
-
:key =>
|
57
|
+
# TODO output files in debug logs as asset filename only.
|
58
|
+
file = {
|
59
|
+
:key => f,
|
60
60
|
:body => File.open("#{path}/#{f}"),
|
61
61
|
:public => true,
|
62
62
|
:cache_control => "max-age=31557600"
|
63
|
-
|
63
|
+
}
|
64
|
+
|
65
|
+
gzipped = "#{path}/#{f}.gz"
|
66
|
+
ignore = false
|
67
|
+
|
68
|
+
if config.gzip? && File.extname(f) == ".gz"
|
69
|
+
# Don't bother uploading gzipped assets if we are in gzip_compression mode
|
70
|
+
# as we will overwrite file.css with file.css.gz if it exists.
|
71
|
+
STDERR.puts "Ignoring: #{f}"
|
72
|
+
ignore = true
|
73
|
+
elsif config.gzip? && File.exists?(gzipped)
|
74
|
+
original_size = File.size("#{path}/#{f}")
|
75
|
+
gzipped_size = File.size(gzipped)
|
76
|
+
|
77
|
+
if gzipped_size < original_size
|
78
|
+
percentage = ((gzipped_size.to_f/original_size.to_f)*100).round(2)
|
79
|
+
ext = File.extname( f )[1..-1]
|
80
|
+
mime = Mime::Type.lookup_by_extension( ext )
|
81
|
+
file.merge!({
|
82
|
+
:key => f,
|
83
|
+
:body => File.open(gzipped),
|
84
|
+
:content_type => mime,
|
85
|
+
:content_encoding => 'gzip'
|
86
|
+
})
|
87
|
+
STDERR.puts "Uploading: #{gzipped} in place of #{f} saving #{percentage}%"
|
88
|
+
else
|
89
|
+
percentage = ((original_size.to_f/gzipped_size.to_f)*100).round(2)
|
90
|
+
STDERR.puts "Uploading: #{f} instead of #{gzipped} (compression increases this file by #{percentage}%)"
|
91
|
+
end
|
92
|
+
else
|
93
|
+
STDERR.puts "Uploading: #{f}"
|
94
|
+
end
|
95
|
+
|
96
|
+
file = bucket.files.create( file ) unless ignore
|
64
97
|
end
|
65
98
|
|
66
99
|
def upload_files
|
data/lib/asset_sync/version.rb
CHANGED
@@ -2,6 +2,9 @@ AssetSync.configure do |config|
|
|
2
2
|
config.aws_access_key = ENV['AWS_ACCESS_KEY']
|
3
3
|
config.aws_access_secret = ENV['AWS_ACCESS_SECRET']
|
4
4
|
config.aws_bucket = ENV['AWS_BUCKET']
|
5
|
-
# config.aws_region = "eu-west-1"
|
6
5
|
config.existing_remote_files = "keep"
|
6
|
+
# Increase upload performance by configuring your region
|
7
|
+
# config.aws_region = "eu-west-1"
|
8
|
+
# Automatically replace files with their equivalent gzip compressed version
|
9
|
+
# config.gzip_compression = true
|
7
10
|
end
|
@@ -1,27 +1,30 @@
|
|
1
1
|
defaults: &defaults
|
2
|
-
|
3
|
-
|
2
|
+
aws_access_key: "<%= aws_access_key %>"
|
3
|
+
aws_access_secret: "<%= aws_access_secret %>"
|
4
4
|
# You may need to specify what region your S3 bucket is in
|
5
|
-
#
|
5
|
+
# aws_region: "eu-west-1"
|
6
6
|
existing_remote_files: keep
|
7
|
+
# Automatically replace files with their equivalent gzip compressed version
|
8
|
+
# gzip_compression = true
|
9
|
+
|
7
10
|
|
8
11
|
development:
|
9
12
|
<<: *defaults
|
10
|
-
|
13
|
+
aws_bucket: "<%= app_name %>_development"
|
11
14
|
# Existing pre-compiled assets on S3 will be kept
|
12
15
|
# existing_remote_files: keep
|
13
16
|
|
14
17
|
test:
|
15
18
|
<<: *defaults
|
16
|
-
|
19
|
+
aws_bucket: "<%= app_name %>_test"
|
17
20
|
|
18
21
|
staging:
|
19
22
|
<<: *defaults
|
20
|
-
|
23
|
+
aws_bucket: "<%= app_name %>_test"
|
21
24
|
|
22
25
|
production:
|
23
26
|
<<: *defaults
|
24
|
-
|
27
|
+
aws_bucket: "<%= app_name %>_production"
|
25
28
|
# Existing pre-compiled assets on S3 will be deleted
|
26
29
|
# existing_remote_files: delete
|
27
30
|
|
data/spec/asset_sync_spec.rb
CHANGED
@@ -39,6 +39,10 @@ describe AssetSync, 'with initializer' do
|
|
39
39
|
AssetSync.config.existing_remote_files.should == "keep"
|
40
40
|
end
|
41
41
|
|
42
|
+
it "should default gzip_compression to false" do
|
43
|
+
AssetSync.config.gzip_compression.should be_false
|
44
|
+
end
|
45
|
+
|
42
46
|
end
|
43
47
|
|
44
48
|
|
@@ -69,6 +73,10 @@ describe AssetSync, 'from yml' do
|
|
69
73
|
AssetSync.config.existing_remote_files.should == "keep"
|
70
74
|
end
|
71
75
|
|
76
|
+
it "should default gzip_compression to false" do
|
77
|
+
AssetSync.config.gzip_compression.should be_false
|
78
|
+
end
|
79
|
+
|
72
80
|
end
|
73
81
|
|
74
82
|
describe AssetSync, 'with no configuration' do
|
@@ -82,4 +90,18 @@ describe AssetSync, 'with no configuration' do
|
|
82
90
|
lambda{ AssetSync.sync }.should raise_error(AssetSync::Config::Invalid)
|
83
91
|
end
|
84
92
|
|
93
|
+
end
|
94
|
+
|
95
|
+
describe AssetSync, 'with gzip_compression enabled' do
|
96
|
+
|
97
|
+
before(:all) do
|
98
|
+
Rails.root = 'without_yml'
|
99
|
+
AssetSync.config = AssetSync::Config.new
|
100
|
+
AssetSync.config.gzip_compression = true
|
101
|
+
end
|
102
|
+
|
103
|
+
it "config.gzip? should be true" do
|
104
|
+
AssetSync.config.gzip?.should be_true
|
105
|
+
end
|
106
|
+
|
85
107
|
end
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: asset_sync
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.1.
|
4
|
+
version: 0.1.9
|
5
5
|
prerelease:
|
6
6
|
platform: ruby
|
7
7
|
authors:
|
@@ -10,11 +10,11 @@ authors:
|
|
10
10
|
autorequire:
|
11
11
|
bindir: bin
|
12
12
|
cert_chain: []
|
13
|
-
date: 2011-
|
13
|
+
date: 2011-11-05 00:00:00.000000000Z
|
14
14
|
dependencies:
|
15
15
|
- !ruby/object:Gem::Dependency
|
16
16
|
name: fog
|
17
|
-
requirement: &
|
17
|
+
requirement: &70129910998440 !ruby/object:Gem::Requirement
|
18
18
|
none: false
|
19
19
|
requirements:
|
20
20
|
- - ! '>='
|
@@ -22,10 +22,10 @@ dependencies:
|
|
22
22
|
version: '0'
|
23
23
|
type: :runtime
|
24
24
|
prerelease: false
|
25
|
-
version_requirements: *
|
25
|
+
version_requirements: *70129910998440
|
26
26
|
- !ruby/object:Gem::Dependency
|
27
27
|
name: activemodel
|
28
|
-
requirement: &
|
28
|
+
requirement: &70129910980480 !ruby/object:Gem::Requirement
|
29
29
|
none: false
|
30
30
|
requirements:
|
31
31
|
- - ! '>='
|
@@ -33,10 +33,10 @@ dependencies:
|
|
33
33
|
version: '0'
|
34
34
|
type: :runtime
|
35
35
|
prerelease: false
|
36
|
-
version_requirements: *
|
36
|
+
version_requirements: *70129910980480
|
37
37
|
- !ruby/object:Gem::Dependency
|
38
38
|
name: rspec
|
39
|
-
requirement: &
|
39
|
+
requirement: &70129910979840 !ruby/object:Gem::Requirement
|
40
40
|
none: false
|
41
41
|
requirements:
|
42
42
|
- - ! '>='
|
@@ -44,10 +44,10 @@ dependencies:
|
|
44
44
|
version: '0'
|
45
45
|
type: :development
|
46
46
|
prerelease: false
|
47
|
-
version_requirements: *
|
47
|
+
version_requirements: *70129910979840
|
48
48
|
- !ruby/object:Gem::Dependency
|
49
49
|
name: bundler
|
50
|
-
requirement: &
|
50
|
+
requirement: &70129910979280 !ruby/object:Gem::Requirement
|
51
51
|
none: false
|
52
52
|
requirements:
|
53
53
|
- - ! '>='
|
@@ -55,10 +55,10 @@ dependencies:
|
|
55
55
|
version: '0'
|
56
56
|
type: :development
|
57
57
|
prerelease: false
|
58
|
-
version_requirements: *
|
58
|
+
version_requirements: *70129910979280
|
59
59
|
- !ruby/object:Gem::Dependency
|
60
60
|
name: jeweler
|
61
|
-
requirement: &
|
61
|
+
requirement: &70129910978860 !ruby/object:Gem::Requirement
|
62
62
|
none: false
|
63
63
|
requirements:
|
64
64
|
- - ! '>='
|
@@ -66,7 +66,7 @@ dependencies:
|
|
66
66
|
version: '0'
|
67
67
|
type: :development
|
68
68
|
prerelease: false
|
69
|
-
version_requirements: *
|
69
|
+
version_requirements: *70129910978860
|
70
70
|
description: After you run assets:precompile your assets will be synchronised with
|
71
71
|
your S3 bucket, deleting unused files and only uploading the files it needs to.
|
72
72
|
email:
|
@@ -119,7 +119,7 @@ rubyforge_project: asset_sync
|
|
119
119
|
rubygems_version: 1.8.10
|
120
120
|
signing_key:
|
121
121
|
specification_version: 3
|
122
|
-
summary: Synchronises Assets
|
122
|
+
summary: Synchronises Assets in a Rails 3 application and S3/Cloudfront
|
123
123
|
test_files:
|
124
124
|
- spec/asset_sync_spec.rb
|
125
125
|
- spec/spec_helper.rb
|