asset_hash 0.1.1 → 0.2.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.
- data/Gemfile +9 -3
- data/README.textile +7 -1
- data/lib/asset_hash.rb +8 -5
- data/lib/tasks/asset_hash.rake +50 -0
- metadata +2 -2
data/Gemfile
CHANGED
|
@@ -1,8 +1,14 @@
|
|
|
1
1
|
source "http://rubygems.org"
|
|
2
2
|
|
|
3
|
-
|
|
4
|
-
gem
|
|
5
|
-
|
|
3
|
+
group :development do
|
|
4
|
+
gem 'aws-s3'
|
|
5
|
+
end
|
|
6
|
+
|
|
7
|
+
group :test do
|
|
8
|
+
gem "rails", "3.0.5"
|
|
9
|
+
gem "capybara", ">= 0.4.0"
|
|
10
|
+
gem "sqlite3"
|
|
11
|
+
end
|
|
6
12
|
|
|
7
13
|
# To use debugger (ruby-debug for Ruby 1.8.7+, ruby-debug19 for Ruby 1.9.2+)
|
|
8
14
|
# gem 'ruby-debug'
|
data/README.textile
CHANGED
|
@@ -17,7 +17,13 @@ Add the gem to your Gemfile
|
|
|
17
17
|
|
|
18
18
|
Set up a CloudFront distribution with a custom origin that points to your website's URL.
|
|
19
19
|
|
|
20
|
-
|
|
20
|
+
There is a rake task included in the gem that guides you through creating CloudFront distribution easily, to run it just the following command from your app directory.
|
|
21
|
+
|
|
22
|
+
<code>rake asset:hash:create_cloudfront_distribution</code>
|
|
23
|
+
|
|
24
|
+
It is an interactive rake task that will ask you for your Amazon credentials and the domain you want to point the custom origin to.
|
|
25
|
+
|
|
26
|
+
Alternatively you can check the following website as well as the Amazon CloudFront documentation for help on setting up a custom origin CloudFront distribution:
|
|
21
27
|
http://docs.amazonwebservices.com/AmazonCloudFront/latest/APIReference/index.html?DistributionConfigDatatype.html#CustomOriginChildElements
|
|
22
28
|
|
|
23
29
|
Configure your environment file to use this CloudFront distribution as your asset host and the hashed filenames in the helpers.
|
data/lib/asset_hash.rb
CHANGED
|
@@ -55,14 +55,17 @@ module AssetHash
|
|
|
55
55
|
|
|
56
56
|
def self.fingerprint(path)
|
|
57
57
|
path = File.join path_prefix, path unless path =~ /#{path_prefix}/
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
58
|
+
begin
|
|
59
|
+
d = Digest::MD5.file(path).hexdigest
|
|
60
|
+
path = path.gsub(path_prefix, '')
|
|
61
|
+
extension = (path =~ /\.gz$/ ? File.extname(File.basename(path, ".gz")) + ".gz" : File.extname(path))
|
|
62
|
+
File.join File.dirname(path), "#{File.basename(path, extension)}-#{d}#{extension}"
|
|
63
|
+
rescue Errno::ENOENT
|
|
64
|
+
return original_path(path)#path.gsub(path_prefix, '')
|
|
65
|
+
end
|
|
62
66
|
end
|
|
63
67
|
|
|
64
68
|
def self.original_path(path)
|
|
65
|
-
path = File.join path_prefix, path unless path =~ /#{path_prefix}/
|
|
66
69
|
path = path.gsub(path_prefix, '')
|
|
67
70
|
extension = (path =~ /\.gz$/ ? File.extname(File.basename(path, ".gz")) + ".gz" : File.extname(path))
|
|
68
71
|
File.join File.dirname(path), "#{File.basename(path, extension)}#{extension}"
|
data/lib/tasks/asset_hash.rake
CHANGED
|
@@ -6,5 +6,55 @@ namespace :asset do
|
|
|
6
6
|
task :generate do
|
|
7
7
|
AssetHash.process!
|
|
8
8
|
end
|
|
9
|
+
|
|
10
|
+
desc "Create a custom origin cloudfront distribution"
|
|
11
|
+
task :create_cloudfront_distribution do
|
|
12
|
+
begin
|
|
13
|
+
require 'aws/s3'
|
|
14
|
+
require 'time'
|
|
15
|
+
require 'digest/sha1'
|
|
16
|
+
require 'net/https'
|
|
17
|
+
require 'base64'
|
|
18
|
+
STDOUT.puts "Enter your AWS Access ID (Don't forget to sign up for Cloudfront)"
|
|
19
|
+
access_key_id = STDIN.gets.strip
|
|
20
|
+
STDOUT.puts "Enter your AWS Secret Key"
|
|
21
|
+
secret_access_key = STDIN.gets.strip
|
|
22
|
+
STDOUT.puts "Enter the url of the domain to distribute on cloudfront (eg. google.com)"
|
|
23
|
+
cloudfront_distribution_url = STDIN.gets.strip
|
|
24
|
+
STDOUT.puts "Enter a description for your cloudfront distribution"
|
|
25
|
+
cloudfront_distribution_description = STDIN.gets.strip
|
|
26
|
+
AWS::S3::Base.establish_connection!(
|
|
27
|
+
:access_key_id => access_key_id,
|
|
28
|
+
:secret_access_key => secret_access_key
|
|
29
|
+
)
|
|
30
|
+
digest = OpenSSL::Digest.new('sha1')
|
|
31
|
+
digest = OpenSSL::HMAC.digest(digest, secret_access_key, date = Time.now.utc.strftime("%a, %d %b %Y %H:%M:%S %Z"))
|
|
32
|
+
uri = URI.parse("https://cloudfront.amazonaws.com/2010-11-01/distribution")
|
|
33
|
+
req = Net::HTTP::Post.new(uri.path)
|
|
34
|
+
req.initialize_http_header({
|
|
35
|
+
'x-amz-date' => date,
|
|
36
|
+
'Content-Type' => 'text/xml',
|
|
37
|
+
'Authorization' => "AWS %s:%s" % [access_key_id, Base64.encode64(digest)]
|
|
38
|
+
})
|
|
39
|
+
req.body = <<EOF
|
|
40
|
+
<DistributionConfig xmlns="http://cloudfront.amazonaws.com/doc/2010-11-01/">
|
|
41
|
+
<CustomOrigin>
|
|
42
|
+
<DNSName>#{cloudfront_distribution_url}</DNSName>
|
|
43
|
+
<OriginProtocolPolicy>http-only</OriginProtocolPolicy>
|
|
44
|
+
</CustomOrigin>
|
|
45
|
+
<Comment>#{cloudfront_distribution_description}</Comment>
|
|
46
|
+
<Enabled>true</Enabled>
|
|
47
|
+
<CallerReference>#{Time.now.utc.to_i}</CallerReference>
|
|
48
|
+
</DistributionConfig>
|
|
49
|
+
EOF
|
|
50
|
+
http = Net::HTTP.new(uri.host, uri.port)
|
|
51
|
+
http.use_ssl = true
|
|
52
|
+
http.verify_mode = OpenSSL::SSL::VERIFY_NONE
|
|
53
|
+
res = http.request(req)
|
|
54
|
+
STDOUT.puts res.code == '201' ? "Distribution created: #{res.body.match(/\<Id\>(.+)\<\/Id\>/)[1]}" : "Distribution failed: #{res.body}"
|
|
55
|
+
rescue LoadError => e
|
|
56
|
+
STDERR.puts "Could not find the aws-s3 gem, Run `gem install aws-s3` to install s3"
|
|
57
|
+
end
|
|
58
|
+
end
|
|
9
59
|
end
|
|
10
60
|
end
|
metadata
CHANGED
|
@@ -2,7 +2,7 @@
|
|
|
2
2
|
name: asset_hash
|
|
3
3
|
version: !ruby/object:Gem::Version
|
|
4
4
|
prerelease:
|
|
5
|
-
version: 0.
|
|
5
|
+
version: 0.2.0
|
|
6
6
|
platform: ruby
|
|
7
7
|
authors:
|
|
8
8
|
- Donald Piret
|
|
@@ -10,7 +10,7 @@ autorequire:
|
|
|
10
10
|
bindir: bin
|
|
11
11
|
cert_chain: []
|
|
12
12
|
|
|
13
|
-
date: 2011-
|
|
13
|
+
date: 2011-04-28 00:00:00 +08:00
|
|
14
14
|
default_executable:
|
|
15
15
|
dependencies:
|
|
16
16
|
- !ruby/object:Gem::Dependency
|