s3_website 0.1.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 +7 -0
- data/.gitignore +5 -0
- data/.travis.yml +5 -0
- data/Gemfile +3 -0
- data/Gemfile.lock +81 -0
- data/LICENSE +42 -0
- data/README.md +332 -0
- data/Rakefile +18 -0
- data/bin/s3_website +38 -0
- data/changelog.md +7 -0
- data/example-configurations.md +60 -0
- data/features/as-library.feature +29 -0
- data/features/cassettes/cucumber_tags/create-redirect.yml +384 -0
- data/features/cassettes/cucumber_tags/new-and-changed-files.yml +303 -0
- data/features/cassettes/cucumber_tags/new-files-for-sydney.yml +211 -0
- data/features/cassettes/cucumber_tags/new-files.yml +355 -0
- data/features/cassettes/cucumber_tags/no-new-or-changed-files.yml +359 -0
- data/features/cassettes/cucumber_tags/one-file-to-delete.yml +390 -0
- data/features/cassettes/cucumber_tags/only-changed-files.yml +411 -0
- data/features/cassettes/cucumber_tags/s3-and-cloudfront-when-updating-a-file.yml +435 -0
- data/features/cassettes/cucumber_tags/s3-and-cloudfront.yml +290 -0
- data/features/cloudfront.feature +35 -0
- data/features/delete.feature +18 -0
- data/features/instructions-for-new-user.feature +94 -0
- data/features/redirects.feature +16 -0
- data/features/step_definitions/steps.rb +67 -0
- data/features/support/env.rb +26 -0
- data/features/support/test_site_dirs/cdn-powered.blog.fi/_site/css/styles.css +3 -0
- data/features/support/test_site_dirs/cdn-powered.blog.fi/_site/index.html +5 -0
- data/features/support/test_site_dirs/cdn-powered.blog.fi/s3_website.yml +4 -0
- data/features/support/test_site_dirs/cdn-powered.with-one-change.blog.fi/_site/css/styles.css +3 -0
- data/features/support/test_site_dirs/cdn-powered.with-one-change.blog.fi/_site/index.html +10 -0
- data/features/support/test_site_dirs/cdn-powered.with-one-change.blog.fi/s3_website.yml +4 -0
- data/features/support/test_site_dirs/create-redirects/_site/.gitkeep +0 -0
- data/features/support/test_site_dirs/create-redirects/s3_website.yml +6 -0
- data/features/support/test_site_dirs/index-and-assets.blog.fi/_site/assets/picture.gif +0 -0
- data/features/support/test_site_dirs/index-and-assets.blog.fi/_site/css/styles.css +3 -0
- data/features/support/test_site_dirs/index-and-assets.blog.fi/_site/index.html +5 -0
- data/features/support/test_site_dirs/index-and-assets.blog.fi/s3_website.yml +3 -0
- data/features/support/test_site_dirs/my.blog.com/_site/css/styles.css +3 -0
- data/features/support/test_site_dirs/my.blog.com/_site/index.html +5 -0
- data/features/support/test_site_dirs/my.blog.com/s3_website.yml +3 -0
- data/features/support/test_site_dirs/my.sydney.blog.au/_site/css/styles.css +3 -0
- data/features/support/test_site_dirs/my.sydney.blog.au/_site/index.html +5 -0
- data/features/support/test_site_dirs/my.sydney.blog.au/s3_website.yml +4 -0
- data/features/support/test_site_dirs/new-and-changed-files.com/_site/css/styles.css +4 -0
- data/features/support/test_site_dirs/new-and-changed-files.com/_site/index.html +8 -0
- data/features/support/test_site_dirs/new-and-changed-files.com/s3_website.yml +3 -0
- data/features/support/test_site_dirs/no-new-or-changed-files.com/_site/css/styles.css +3 -0
- data/features/support/test_site_dirs/no-new-or-changed-files.com/_site/index.html +5 -0
- data/features/support/test_site_dirs/no-new-or-changed-files.com/s3_website.yml +3 -0
- data/features/support/test_site_dirs/only-changed-files.com/_site/css/styles.css +3 -0
- data/features/support/test_site_dirs/only-changed-files.com/_site/index.html +9 -0
- data/features/support/test_site_dirs/only-changed-files.com/s3_website.yml +3 -0
- data/features/support/test_site_dirs/site.with.css-maxage.com/_site/css/styles.css +3 -0
- data/features/support/test_site_dirs/site.with.css-maxage.com/_site/index.html +5 -0
- data/features/support/test_site_dirs/site.with.css-maxage.com/s3_website.yml +5 -0
- data/features/support/test_site_dirs/site.with.gzipped-and-max-aged-content.com/_site/css/styles.css +3 -0
- data/features/support/test_site_dirs/site.with.gzipped-and-max-aged-content.com/_site/index.html +5 -0
- data/features/support/test_site_dirs/site.with.gzipped-and-max-aged-content.com/s3_website.yml +5 -0
- data/features/support/test_site_dirs/site.with.gzipped-html.com/_site/css/styles.css +3 -0
- data/features/support/test_site_dirs/site.with.gzipped-html.com/_site/index.html +5 -0
- data/features/support/test_site_dirs/site.with.gzipped-html.com/s3_website.yml +5 -0
- data/features/support/test_site_dirs/site.with.maxage.com/_site/css/styles.css +3 -0
- data/features/support/test_site_dirs/site.with.maxage.com/_site/index.html +5 -0
- data/features/support/test_site_dirs/site.with.maxage.com/s3_website.yml +4 -0
- data/features/support/test_site_dirs/unpublish-a-post.com/_site/css/styles.css +3 -0
- data/features/support/test_site_dirs/unpublish-a-post.com/s3_website.yml +3 -0
- data/features/support/vcr.rb +18 -0
- data/features/sync.feature +80 -0
- data/features/website-performance.feature +57 -0
- data/lib/cloudfront/invalidator.rb +22 -0
- data/lib/s3_website.rb +20 -0
- data/lib/s3_website/config_loader.rb +56 -0
- data/lib/s3_website/diff_helper.rb +21 -0
- data/lib/s3_website/endpoint.rb +30 -0
- data/lib/s3_website/errors.rb +28 -0
- data/lib/s3_website/keyboard.rb +27 -0
- data/lib/s3_website/parallelism.rb +18 -0
- data/lib/s3_website/retry.rb +19 -0
- data/lib/s3_website/tasks.rb +42 -0
- data/lib/s3_website/upload.rb +103 -0
- data/lib/s3_website/uploader.rb +160 -0
- data/s3-website.gemspec +39 -0
- data/spec/lib/config_loader_spec.rb +20 -0
- data/spec/lib/endpoint_spec.rb +27 -0
- data/spec/lib/keyboard_spec.rb +59 -0
- data/spec/lib/parallelism_spec.rb +43 -0
- data/spec/lib/retry_spec.rb +34 -0
- data/spec/lib/upload_spec.rb +205 -0
- data/spec/lib/uploader_spec.rb +30 -0
- data/spec/sample_files/hyde_site/_site/.vimrc +5 -0
- data/spec/sample_files/hyde_site/_site/css/styles.css +3 -0
- data/spec/sample_files/hyde_site/_site/index.html +1 -0
- data/spec/sample_files/hyde_site/s3_website.yml +3 -0
- data/spec/sample_files/tokyo_site/_site/.vimrc +5 -0
- data/spec/sample_files/tokyo_site/_site/css/styles.css +3 -0
- data/spec/sample_files/tokyo_site/_site/index.html +1 -0
- data/spec/sample_files/tokyo_site/s3_website.yml +4 -0
- data/spec/spec_helper.rb +1 -0
- metadata +416 -0
data/Rakefile
ADDED
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
require 'bundler'
|
|
2
|
+
Bundler::GemHelper.install_tasks
|
|
3
|
+
|
|
4
|
+
desc "Build the project"
|
|
5
|
+
task :default => 'test'
|
|
6
|
+
|
|
7
|
+
desc "Run tests"
|
|
8
|
+
task :test do
|
|
9
|
+
ENV['disable_parallel_processing'] = 'true'
|
|
10
|
+
sh "bundle exec rspec"
|
|
11
|
+
sh "bundle exec cucumber --tags ~@skip-on-travis"
|
|
12
|
+
end
|
|
13
|
+
|
|
14
|
+
desc 'Run work-in-progress features'
|
|
15
|
+
task "cucumber:wip" do
|
|
16
|
+
ENV['disable_parallel_processing'] = 'true'
|
|
17
|
+
sh "bundle exec cucumber --tags @wip"
|
|
18
|
+
end
|
data/bin/s3_website
ADDED
|
@@ -0,0 +1,38 @@
|
|
|
1
|
+
#!/usr/bin/env ruby
|
|
2
|
+
|
|
3
|
+
require File.dirname(__FILE__) + '/../lib/s3_website'
|
|
4
|
+
|
|
5
|
+
class Cfg < Thor
|
|
6
|
+
desc 'create', 'Create a config file with placeholder values'
|
|
7
|
+
def create
|
|
8
|
+
S3Website::Tasks.config_create parent_options[:site]
|
|
9
|
+
end
|
|
10
|
+
end
|
|
11
|
+
|
|
12
|
+
class Cli < Thor
|
|
13
|
+
class_option(
|
|
14
|
+
:site,
|
|
15
|
+
:type => :string,
|
|
16
|
+
:default => '_site',
|
|
17
|
+
:desc => 'The directory where your website files are'
|
|
18
|
+
)
|
|
19
|
+
option(
|
|
20
|
+
:headless,
|
|
21
|
+
:type => :boolean,
|
|
22
|
+
:desc =>
|
|
23
|
+
'When headless, s3_website will not require human interaction at any point'
|
|
24
|
+
)
|
|
25
|
+
desc 'push', 'Push local files with the S3 website'
|
|
26
|
+
long_desc <<-LONGDESC
|
|
27
|
+
`s3_website push` will upload new and changes files to S3. It will
|
|
28
|
+
also delete from S3 the files that you no longer have locally.
|
|
29
|
+
LONGDESC
|
|
30
|
+
def push
|
|
31
|
+
S3Website::Tasks.push(options[:site], options[:headless])
|
|
32
|
+
end
|
|
33
|
+
|
|
34
|
+
desc 'cfg SUBCOMMAND ...ARGS', 'Operate on the config file'
|
|
35
|
+
subcommand 'cfg', Cfg
|
|
36
|
+
end
|
|
37
|
+
|
|
38
|
+
Cli.start(ARGV)
|
data/changelog.md
ADDED
|
@@ -0,0 +1,60 @@
|
|
|
1
|
+
# Example `s3_website` configurations
|
|
2
|
+
|
|
3
|
+
This document shows examples of complete `s3_website.yml` configurations.
|
|
4
|
+
|
|
5
|
+
## Minimal
|
|
6
|
+
|
|
7
|
+
````yaml
|
|
8
|
+
s3_id: abcd
|
|
9
|
+
s3_secret: 2s+x92
|
|
10
|
+
s3_bucket: your.domain.net
|
|
11
|
+
````
|
|
12
|
+
|
|
13
|
+
## Minimal with EC2 AIM roles
|
|
14
|
+
|
|
15
|
+
````yaml
|
|
16
|
+
s3_bucket: your.domain.net
|
|
17
|
+
````
|
|
18
|
+
|
|
19
|
+
If you run `s3_website` on an EC2 instance with IAM roles, it is possible to omit
|
|
20
|
+
the `s3_id` and `s3_secret`.
|
|
21
|
+
|
|
22
|
+
## Optimised for speed: using CloudFront, gzip and cache headers
|
|
23
|
+
|
|
24
|
+
````yaml
|
|
25
|
+
s3_id: <%= ENV['your_domain_net_aws_key'] %>
|
|
26
|
+
s3_secret: <%= ENV['your_domain_net_aws_secret'] %>
|
|
27
|
+
s3_bucket: your.domain.net
|
|
28
|
+
cloudfront_distribution_id: <%= ENV['your_domain_net_cloudfront_distribution_id'] %>
|
|
29
|
+
cloudfront_distribution_config:
|
|
30
|
+
default_cache_behavior:
|
|
31
|
+
min_TTL: <%= 60 * 60 * 24 %>
|
|
32
|
+
aliases:
|
|
33
|
+
quantity: 1
|
|
34
|
+
items:
|
|
35
|
+
CNAME: your.domain.net
|
|
36
|
+
max_age: 120
|
|
37
|
+
gzip: true
|
|
38
|
+
````
|
|
39
|
+
|
|
40
|
+
Above, we store the AWS credentials and the id of the CloudFront distribution as
|
|
41
|
+
environment variables. It's convenient, since you can keep the `s3_website.yml`
|
|
42
|
+
in a public Git repo, and thus have your deployment configurations
|
|
43
|
+
version-controlled.
|
|
44
|
+
|
|
45
|
+
## Using redirects
|
|
46
|
+
|
|
47
|
+
````yaml
|
|
48
|
+
s3_id: hello
|
|
49
|
+
s3_secret: galaxy
|
|
50
|
+
redirects:
|
|
51
|
+
index.php: /
|
|
52
|
+
about.php: about.html
|
|
53
|
+
routing_rules:
|
|
54
|
+
- condition:
|
|
55
|
+
key_prefix_equals: code/repositories/git/
|
|
56
|
+
redirect:
|
|
57
|
+
host_name: git.johnny.com
|
|
58
|
+
replace_key_prefix_with: ""
|
|
59
|
+
http_redirect_code: 301
|
|
60
|
+
````
|
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
Feature: Using s3_website as a library
|
|
2
|
+
|
|
3
|
+
As a developer
|
|
4
|
+
I want to programmatically use the s3_website API
|
|
5
|
+
So that I can extend my software with the capabilities of s3_website
|
|
6
|
+
|
|
7
|
+
@one-file-to-delete
|
|
8
|
+
Scenario: Developer wants feedback on how many files s3_website deleted
|
|
9
|
+
When my S3 website is in "features/support/test_site_dirs/unpublish-a-post.com"
|
|
10
|
+
Then s3_website will push my blog to S3
|
|
11
|
+
And report that it deleted 1 file from S3
|
|
12
|
+
|
|
13
|
+
@new-and-changed-files
|
|
14
|
+
Scenario: Developer wants feedback on how many files s3_website uploaded
|
|
15
|
+
When my S3 website is in "features/support/test_site_dirs/new-and-changed-files.com"
|
|
16
|
+
Then s3_website will push my blog to S3
|
|
17
|
+
And report that it uploaded 1 new and 1 changed files into S3
|
|
18
|
+
|
|
19
|
+
@s3-and-cloudfront-when-updating-a-file
|
|
20
|
+
Scenario: Developer wants feedback on how many Cloudfront items s3_website invalidated
|
|
21
|
+
When my S3 website is in "features/support/test_site_dirs/cdn-powered.with-one-change.blog.fi"
|
|
22
|
+
Then s3_website will push my blog to S3 and invalidate the Cloudfront distribution
|
|
23
|
+
And report that it invalidated 2 Cloudfront item
|
|
24
|
+
|
|
25
|
+
@create-redirect
|
|
26
|
+
Scenario: Developer wants feedback on how many redirects s3_website created
|
|
27
|
+
When my S3 website is in "features/support/test_site_dirs/create-redirects"
|
|
28
|
+
Then s3_website will push my blog to S3
|
|
29
|
+
And report that it created 2 new redirects
|
|
@@ -0,0 +1,384 @@
|
|
|
1
|
+
---
|
|
2
|
+
http_interactions:
|
|
3
|
+
- request:
|
|
4
|
+
method: get
|
|
5
|
+
uri: https://s3.amazonaws.com/s3-website-test.net?max-keys=1000
|
|
6
|
+
body:
|
|
7
|
+
encoding: US-ASCII
|
|
8
|
+
string: ''
|
|
9
|
+
headers:
|
|
10
|
+
Content-Type:
|
|
11
|
+
- ''
|
|
12
|
+
User-Agent:
|
|
13
|
+
- aws-sdk-ruby/1.8.5 ruby/1.9.3 x86_64-darwin11.4.2
|
|
14
|
+
Date:
|
|
15
|
+
- Tue, 28 May 2013 16:44:09 GMT
|
|
16
|
+
Authorization:
|
|
17
|
+
- AWS foo:foo
|
|
18
|
+
Accept:
|
|
19
|
+
- ! '*/*'
|
|
20
|
+
response:
|
|
21
|
+
status:
|
|
22
|
+
code: 200
|
|
23
|
+
message: OK
|
|
24
|
+
headers:
|
|
25
|
+
X-Amz-Id-2:
|
|
26
|
+
- kGCga6NIm0ybqHxPbkdrzL4YTE2Ik7Az88+JBSXk1uPWgj0a0ozR9z5BdOUOZSKy
|
|
27
|
+
X-Amz-Request-Id:
|
|
28
|
+
- 87A0319E10B35221
|
|
29
|
+
Date:
|
|
30
|
+
- Tue, 28 May 2013 16:43:53 GMT
|
|
31
|
+
Content-Type:
|
|
32
|
+
- application/xml
|
|
33
|
+
Transfer-Encoding:
|
|
34
|
+
- chunked
|
|
35
|
+
Server:
|
|
36
|
+
- AmazonS3
|
|
37
|
+
body:
|
|
38
|
+
encoding: US-ASCII
|
|
39
|
+
string: ! '<?xml version="1.0" encoding="UTF-8"?>
|
|
40
|
+
|
|
41
|
+
<ListBucketResult xmlns="http://s3.amazonaws.com/doc/2006-03-01/"><Name>s3-website-test.net</Name><Prefix></Prefix><Marker></Marker><MaxKeys>1000</MaxKeys><IsTruncated>false</IsTruncated><Contents><Key>.gitkeep</Key><LastModified>2013-05-28T16:27:36.000Z</LastModified><ETag>"d41d8cd98f00b204e9800998ecf8427e"</ETag><Size>0</Size><Owner><ID>3855ebae0f370c3dd0c8d8031863792112bd2a2cb18fa310d3f463ae0dea62f1</ID><DisplayName>fluid83</DisplayName></Owner><StorageClass>STANDARD</StorageClass></Contents></ListBucketResult>'
|
|
42
|
+
http_version:
|
|
43
|
+
recorded_at: Tue, 28 May 2013 16:44:09 GMT
|
|
44
|
+
- request:
|
|
45
|
+
method: head
|
|
46
|
+
uri: https://s3.amazonaws.com/s3-website-test.net/.gitkeep
|
|
47
|
+
body:
|
|
48
|
+
encoding: US-ASCII
|
|
49
|
+
string: ''
|
|
50
|
+
headers:
|
|
51
|
+
Content-Type:
|
|
52
|
+
- ''
|
|
53
|
+
User-Agent:
|
|
54
|
+
- aws-sdk-ruby/1.8.5 ruby/1.9.3 x86_64-darwin11.4.2
|
|
55
|
+
Date:
|
|
56
|
+
- Tue, 28 May 2013 16:44:09 GMT
|
|
57
|
+
Authorization:
|
|
58
|
+
- AWS foo:foo
|
|
59
|
+
Accept:
|
|
60
|
+
- ! '*/*'
|
|
61
|
+
response:
|
|
62
|
+
status:
|
|
63
|
+
code: 200
|
|
64
|
+
message: OK
|
|
65
|
+
headers:
|
|
66
|
+
X-Amz-Id-2:
|
|
67
|
+
- bAn0wcE+zU2espZy2XzUQAoKBVY42UbUZ6ELx6Vm4MFsCynvMspnh9xHuPpbw4BR
|
|
68
|
+
X-Amz-Request-Id:
|
|
69
|
+
- 16821C1979EFD9FB
|
|
70
|
+
Date:
|
|
71
|
+
- Tue, 28 May 2013 16:43:54 GMT
|
|
72
|
+
Last-Modified:
|
|
73
|
+
- Tue, 28 May 2013 16:27:36 GMT
|
|
74
|
+
Etag:
|
|
75
|
+
- ! '"d41d8cd98f00b204e9800998ecf8427e"'
|
|
76
|
+
Accept-Ranges:
|
|
77
|
+
- bytes
|
|
78
|
+
Content-Type:
|
|
79
|
+
- ''
|
|
80
|
+
Content-Length:
|
|
81
|
+
- '0'
|
|
82
|
+
Server:
|
|
83
|
+
- AmazonS3
|
|
84
|
+
body:
|
|
85
|
+
encoding: US-ASCII
|
|
86
|
+
string: ''
|
|
87
|
+
http_version:
|
|
88
|
+
recorded_at: Tue, 28 May 2013 16:44:10 GMT
|
|
89
|
+
- request:
|
|
90
|
+
method: head
|
|
91
|
+
uri: https://s3.amazonaws.com/s3-website-test.net/.gitkeep
|
|
92
|
+
body:
|
|
93
|
+
encoding: US-ASCII
|
|
94
|
+
string: ''
|
|
95
|
+
headers:
|
|
96
|
+
Content-Type:
|
|
97
|
+
- ''
|
|
98
|
+
User-Agent:
|
|
99
|
+
- aws-sdk-ruby/1.8.5 ruby/1.9.3 x86_64-darwin11.4.2
|
|
100
|
+
Date:
|
|
101
|
+
- Tue, 28 May 2013 16:44:10 GMT
|
|
102
|
+
Authorization:
|
|
103
|
+
- AWS foo:foo
|
|
104
|
+
Accept:
|
|
105
|
+
- ! '*/*'
|
|
106
|
+
response:
|
|
107
|
+
status:
|
|
108
|
+
code: 200
|
|
109
|
+
message: OK
|
|
110
|
+
headers:
|
|
111
|
+
X-Amz-Id-2:
|
|
112
|
+
- S4qbXk9empwOUKpUl3teDUGS60qYOg0CxRm7v8ccxa1Z5Y9K60DWvq8v7YHWAPWc
|
|
113
|
+
X-Amz-Request-Id:
|
|
114
|
+
- 62DB5F01C0BEF2BA
|
|
115
|
+
Date:
|
|
116
|
+
- Tue, 28 May 2013 16:43:54 GMT
|
|
117
|
+
Last-Modified:
|
|
118
|
+
- Tue, 28 May 2013 16:27:36 GMT
|
|
119
|
+
Etag:
|
|
120
|
+
- ! '"d41d8cd98f00b204e9800998ecf8427e"'
|
|
121
|
+
Accept-Ranges:
|
|
122
|
+
- bytes
|
|
123
|
+
Content-Type:
|
|
124
|
+
- ''
|
|
125
|
+
Content-Length:
|
|
126
|
+
- '0'
|
|
127
|
+
Server:
|
|
128
|
+
- AmazonS3
|
|
129
|
+
body:
|
|
130
|
+
encoding: US-ASCII
|
|
131
|
+
string: ''
|
|
132
|
+
http_version:
|
|
133
|
+
recorded_at: Tue, 28 May 2013 16:44:10 GMT
|
|
134
|
+
- request:
|
|
135
|
+
method: head
|
|
136
|
+
uri: https://s3.amazonaws.com/s3-website-test.net/.gitkeep
|
|
137
|
+
body:
|
|
138
|
+
encoding: US-ASCII
|
|
139
|
+
string: ''
|
|
140
|
+
headers:
|
|
141
|
+
Content-Type:
|
|
142
|
+
- ''
|
|
143
|
+
User-Agent:
|
|
144
|
+
- aws-sdk-ruby/1.8.5 ruby/1.9.3 x86_64-darwin11.4.2
|
|
145
|
+
Date:
|
|
146
|
+
- Tue, 28 May 2013 16:44:10 GMT
|
|
147
|
+
Authorization:
|
|
148
|
+
- AWS foo:foo
|
|
149
|
+
Accept:
|
|
150
|
+
- ! '*/*'
|
|
151
|
+
response:
|
|
152
|
+
status:
|
|
153
|
+
code: 200
|
|
154
|
+
message: OK
|
|
155
|
+
headers:
|
|
156
|
+
X-Amz-Id-2:
|
|
157
|
+
- KIW+hvipZEv+PgPc03LeddPDEcI7EzDH/CuoxrksuGUIHeA3ecmbIA+jlOgpMCi7
|
|
158
|
+
X-Amz-Request-Id:
|
|
159
|
+
- CFFC7DE02A902B74
|
|
160
|
+
Date:
|
|
161
|
+
- Tue, 28 May 2013 16:43:55 GMT
|
|
162
|
+
Last-Modified:
|
|
163
|
+
- Tue, 28 May 2013 16:27:36 GMT
|
|
164
|
+
Etag:
|
|
165
|
+
- ! '"d41d8cd98f00b204e9800998ecf8427e"'
|
|
166
|
+
Accept-Ranges:
|
|
167
|
+
- bytes
|
|
168
|
+
Content-Type:
|
|
169
|
+
- ''
|
|
170
|
+
Content-Length:
|
|
171
|
+
- '0'
|
|
172
|
+
Server:
|
|
173
|
+
- AmazonS3
|
|
174
|
+
body:
|
|
175
|
+
encoding: US-ASCII
|
|
176
|
+
string: ''
|
|
177
|
+
http_version:
|
|
178
|
+
recorded_at: Tue, 28 May 2013 16:44:11 GMT
|
|
179
|
+
- request:
|
|
180
|
+
method: head
|
|
181
|
+
uri: https://s3.amazonaws.com/s3-website-test.net/welcome.php
|
|
182
|
+
body:
|
|
183
|
+
encoding: US-ASCII
|
|
184
|
+
string: ''
|
|
185
|
+
headers:
|
|
186
|
+
Content-Type:
|
|
187
|
+
- ''
|
|
188
|
+
User-Agent:
|
|
189
|
+
- aws-sdk-ruby/1.8.5 ruby/1.9.3 x86_64-darwin11.4.2
|
|
190
|
+
Date:
|
|
191
|
+
- Tue, 28 May 2013 16:44:11 GMT
|
|
192
|
+
Authorization:
|
|
193
|
+
- AWS foo:foo
|
|
194
|
+
Accept:
|
|
195
|
+
- ! '*/*'
|
|
196
|
+
response:
|
|
197
|
+
status:
|
|
198
|
+
code: 404
|
|
199
|
+
message: Not Found
|
|
200
|
+
headers:
|
|
201
|
+
X-Amz-Request-Id:
|
|
202
|
+
- C3D38989428864B4
|
|
203
|
+
X-Amz-Id-2:
|
|
204
|
+
- iEtbd2+jBo4YB/bWQF7S0nIPD04ctKzv8FpUL3vTPUQzwpVE70mCORaHuXASL/6V
|
|
205
|
+
Content-Type:
|
|
206
|
+
- application/xml
|
|
207
|
+
Transfer-Encoding:
|
|
208
|
+
- chunked
|
|
209
|
+
Date:
|
|
210
|
+
- Tue, 28 May 2013 16:43:54 GMT
|
|
211
|
+
Server:
|
|
212
|
+
- AmazonS3
|
|
213
|
+
body:
|
|
214
|
+
encoding: US-ASCII
|
|
215
|
+
string: ''
|
|
216
|
+
http_version:
|
|
217
|
+
recorded_at: Tue, 28 May 2013 16:44:12 GMT
|
|
218
|
+
- request:
|
|
219
|
+
method: put
|
|
220
|
+
uri: https://s3.amazonaws.com/s3-website-test.net/welcome.php
|
|
221
|
+
body:
|
|
222
|
+
encoding: ASCII-8BIT
|
|
223
|
+
string: !binary ""
|
|
224
|
+
headers:
|
|
225
|
+
Content-Type:
|
|
226
|
+
- ''
|
|
227
|
+
Content-Length:
|
|
228
|
+
- '0'
|
|
229
|
+
X-Amz-Website-Redirect-Location:
|
|
230
|
+
- /welcome
|
|
231
|
+
User-Agent:
|
|
232
|
+
- aws-sdk-ruby/1.8.5 ruby/1.9.3 x86_64-darwin11.4.2
|
|
233
|
+
Date:
|
|
234
|
+
- Tue, 28 May 2013 16:44:12 GMT
|
|
235
|
+
Authorization:
|
|
236
|
+
- AWS foo:foo
|
|
237
|
+
Accept:
|
|
238
|
+
- ! '*/*'
|
|
239
|
+
response:
|
|
240
|
+
status:
|
|
241
|
+
code: 200
|
|
242
|
+
message: OK
|
|
243
|
+
headers:
|
|
244
|
+
X-Amz-Id-2:
|
|
245
|
+
- shxpzCHDkXgP6Ru7MjzBbiiONhv8O72UHLa12njGg/Ml16sNy9kGzzCEUp4T450a
|
|
246
|
+
X-Amz-Request-Id:
|
|
247
|
+
- 73AD74BF97A9FE39
|
|
248
|
+
Date:
|
|
249
|
+
- Tue, 28 May 2013 16:43:56 GMT
|
|
250
|
+
Etag:
|
|
251
|
+
- ! '"d41d8cd98f00b204e9800998ecf8427e"'
|
|
252
|
+
Content-Length:
|
|
253
|
+
- '0'
|
|
254
|
+
Server:
|
|
255
|
+
- AmazonS3
|
|
256
|
+
body:
|
|
257
|
+
encoding: US-ASCII
|
|
258
|
+
string: ''
|
|
259
|
+
http_version:
|
|
260
|
+
recorded_at: Tue, 28 May 2013 16:44:12 GMT
|
|
261
|
+
- request:
|
|
262
|
+
method: head
|
|
263
|
+
uri: https://s3.amazonaws.com/s3-website-test.net/pets/dogs
|
|
264
|
+
body:
|
|
265
|
+
encoding: US-ASCII
|
|
266
|
+
string: ''
|
|
267
|
+
headers:
|
|
268
|
+
Content-Type:
|
|
269
|
+
- ''
|
|
270
|
+
User-Agent:
|
|
271
|
+
- aws-sdk-ruby/1.8.5 ruby/1.9.3 x86_64-darwin11.4.2
|
|
272
|
+
Date:
|
|
273
|
+
- Tue, 28 May 2013 16:44:12 GMT
|
|
274
|
+
Authorization:
|
|
275
|
+
- AWS foo:foo
|
|
276
|
+
Accept:
|
|
277
|
+
- ! '*/*'
|
|
278
|
+
response:
|
|
279
|
+
status:
|
|
280
|
+
code: 404
|
|
281
|
+
message: Not Found
|
|
282
|
+
headers:
|
|
283
|
+
X-Amz-Request-Id:
|
|
284
|
+
- 720BC22A793D95A4
|
|
285
|
+
X-Amz-Id-2:
|
|
286
|
+
- pc2CHQG08/lLFwc/Cq3upvG3Sm+wDzsmf1FsA+YuUjkfojvJB45NbkL5LCX35bpi
|
|
287
|
+
Content-Type:
|
|
288
|
+
- application/xml
|
|
289
|
+
Transfer-Encoding:
|
|
290
|
+
- chunked
|
|
291
|
+
Date:
|
|
292
|
+
- Tue, 28 May 2013 16:43:55 GMT
|
|
293
|
+
Server:
|
|
294
|
+
- AmazonS3
|
|
295
|
+
body:
|
|
296
|
+
encoding: US-ASCII
|
|
297
|
+
string: ''
|
|
298
|
+
http_version:
|
|
299
|
+
recorded_at: Tue, 28 May 2013 16:44:13 GMT
|
|
300
|
+
- request:
|
|
301
|
+
method: put
|
|
302
|
+
uri: https://s3.amazonaws.com/s3-website-test.net/pets/dogs
|
|
303
|
+
body:
|
|
304
|
+
encoding: ASCII-8BIT
|
|
305
|
+
string: !binary ""
|
|
306
|
+
headers:
|
|
307
|
+
Content-Type:
|
|
308
|
+
- ''
|
|
309
|
+
Content-Length:
|
|
310
|
+
- '0'
|
|
311
|
+
X-Amz-Website-Redirect-Location:
|
|
312
|
+
- /cats-and-dogs/wuf
|
|
313
|
+
User-Agent:
|
|
314
|
+
- aws-sdk-ruby/1.8.5 ruby/1.9.3 x86_64-darwin11.4.2
|
|
315
|
+
Date:
|
|
316
|
+
- Tue, 28 May 2013 16:44:13 GMT
|
|
317
|
+
Authorization:
|
|
318
|
+
- AWS foo:foo
|
|
319
|
+
Accept:
|
|
320
|
+
- ! '*/*'
|
|
321
|
+
response:
|
|
322
|
+
status:
|
|
323
|
+
code: 200
|
|
324
|
+
message: OK
|
|
325
|
+
headers:
|
|
326
|
+
X-Amz-Id-2:
|
|
327
|
+
- qnGdeAUFkp76ErkCyx64T/eUilvlp2Y/b7QSCg5u+ghYyTtlR20szfiw0+tO/p7+
|
|
328
|
+
X-Amz-Request-Id:
|
|
329
|
+
- A38BEDA58C01CC5A
|
|
330
|
+
Date:
|
|
331
|
+
- Tue, 28 May 2013 16:43:57 GMT
|
|
332
|
+
Etag:
|
|
333
|
+
- ! '"d41d8cd98f00b204e9800998ecf8427e"'
|
|
334
|
+
Content-Length:
|
|
335
|
+
- '0'
|
|
336
|
+
Server:
|
|
337
|
+
- AmazonS3
|
|
338
|
+
body:
|
|
339
|
+
encoding: US-ASCII
|
|
340
|
+
string: ''
|
|
341
|
+
http_version:
|
|
342
|
+
recorded_at: Tue, 28 May 2013 16:44:14 GMT
|
|
343
|
+
- request:
|
|
344
|
+
method: get
|
|
345
|
+
uri: https://s3.amazonaws.com/s3-website-test.net?max-keys=1000
|
|
346
|
+
body:
|
|
347
|
+
encoding: US-ASCII
|
|
348
|
+
string: ''
|
|
349
|
+
headers:
|
|
350
|
+
Content-Type:
|
|
351
|
+
- ''
|
|
352
|
+
User-Agent:
|
|
353
|
+
- aws-sdk-ruby/1.8.5 ruby/1.9.3 x86_64-darwin11.4.2
|
|
354
|
+
Date:
|
|
355
|
+
- Tue, 28 May 2013 16:44:14 GMT
|
|
356
|
+
Authorization:
|
|
357
|
+
- AWS foo:foo
|
|
358
|
+
Accept:
|
|
359
|
+
- ! '*/*'
|
|
360
|
+
response:
|
|
361
|
+
status:
|
|
362
|
+
code: 200
|
|
363
|
+
message: OK
|
|
364
|
+
headers:
|
|
365
|
+
X-Amz-Id-2:
|
|
366
|
+
- SEAH/XjpATFm0o1XovAZAXLIsYIktpmxg986HNG//aMuvy+sDLmbee5d+fPpO+x0
|
|
367
|
+
X-Amz-Request-Id:
|
|
368
|
+
- 2C139CA22908CC7A
|
|
369
|
+
Date:
|
|
370
|
+
- Tue, 28 May 2013 16:43:58 GMT
|
|
371
|
+
Content-Type:
|
|
372
|
+
- application/xml
|
|
373
|
+
Transfer-Encoding:
|
|
374
|
+
- chunked
|
|
375
|
+
Server:
|
|
376
|
+
- AmazonS3
|
|
377
|
+
body:
|
|
378
|
+
encoding: US-ASCII
|
|
379
|
+
string: ! '<?xml version="1.0" encoding="UTF-8"?>
|
|
380
|
+
|
|
381
|
+
<ListBucketResult xmlns="http://s3.amazonaws.com/doc/2006-03-01/"><Name>s3-website-test.net</Name><Prefix></Prefix><Marker></Marker><MaxKeys>1000</MaxKeys><IsTruncated>false</IsTruncated><Contents><Key>.gitkeep</Key><LastModified>2013-05-28T16:27:36.000Z</LastModified><ETag>"d41d8cd98f00b204e9800998ecf8427e"</ETag><Size>0</Size><Owner><ID>3855ebae0f370c3dd0c8d8031863792112bd2a2cb18fa310d3f463ae0dea62f1</ID><DisplayName>fluid83</DisplayName></Owner><StorageClass>STANDARD</StorageClass></Contents><Contents><Key>pets/dogs</Key><LastModified>2013-05-28T16:43:57.000Z</LastModified><ETag>"d41d8cd98f00b204e9800998ecf8427e"</ETag><Size>0</Size><Owner><ID>3855ebae0f370c3dd0c8d8031863792112bd2a2cb18fa310d3f463ae0dea62f1</ID><DisplayName>fluid83</DisplayName></Owner><StorageClass>STANDARD</StorageClass></Contents><Contents><Key>welcome.php</Key><LastModified>2013-05-28T16:43:56.000Z</LastModified><ETag>"d41d8cd98f00b204e9800998ecf8427e"</ETag><Size>0</Size><Owner><ID>3855ebae0f370c3dd0c8d8031863792112bd2a2cb18fa310d3f463ae0dea62f1</ID><DisplayName>fluid83</DisplayName></Owner><StorageClass>STANDARD</StorageClass></Contents></ListBucketResult>'
|
|
382
|
+
http_version:
|
|
383
|
+
recorded_at: Tue, 28 May 2013 16:44:14 GMT
|
|
384
|
+
recorded_with: VCR 2.3.0
|