em_aws 0.1.0 → 0.1.1
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.lock +1 -1
- data/README.md +0 -20
- data/lib/aws/core/http/em_http_handler.rb +19 -34
- data/lib/em_aws/version.rb +1 -1
- data/spec/em_http_handler_spec.rb +2 -9
- metadata +9 -9
data/Gemfile.lock
CHANGED
data/README.md
CHANGED
@@ -27,7 +27,6 @@ In your environments files add:
|
|
27
27
|
require 'aws/core/http/em_http_handler'
|
28
28
|
AWS.config(
|
29
29
|
:http_handler => AWS::Http::EMHttpHandler.new(
|
30
|
-
:pool_size => 5,
|
31
30
|
:proxy => {:host => "http://myproxy.com", :port => 80}
|
32
31
|
))
|
33
32
|
|
@@ -35,25 +34,6 @@ Your done.
|
|
35
34
|
|
36
35
|
All requests to AWS will use EM-Synchrony's implementation of em-http-request for non-block HTTP request and fiber management.
|
37
36
|
|
38
|
-
## Connection Pools
|
39
|
-
v0.1+ implement connections EventMachine::Synchrony::ConnectionPool. The default pool_size is 5 but it can be
|
40
|
-
increased by in the AWS.config options. Connection pools were problematic for S3 calls that required the :path option for
|
41
|
-
em-http-request and would return AWS::S3::SignatureDoesNotMatch errors; so for now S3 calls with paths do not make use of the connection pools.
|
42
|
-
|
43
|
-
## Heroku Gotcha
|
44
|
-
When deploying to Heroku, if you get "NameError: uninitialized constant Syck::Syck", you need to vendorize em_aws
|
45
|
-
|
46
|
-
From your apps root directory run:
|
47
|
-
|
48
|
-
gem unpack em_aws --target vendor/gems
|
49
|
-
|
50
|
-
Update you gemfile:
|
51
|
-
|
52
|
-
gem 'em_aws', :path => "vendor/gems/em_aws-0.0.3"
|
53
|
-
|
54
|
-
Finally, run bundler and make sure you check-in your new Gemfile.lock.
|
55
|
-
I'm pretty sure the Syck error is do to an outdated version of rubygems and bundler on Heroku, but as of yet have not been able to reproduce it locally.
|
56
|
-
|
57
37
|
## References
|
58
38
|
|
59
39
|
[aws-sdk](https://github.com/amazonwebservices/aws-sdk-for-ruby)
|
@@ -18,7 +18,6 @@ module AWS
|
|
18
18
|
# require 'aws/core/http/em_http_handler'
|
19
19
|
# AWS.config(
|
20
20
|
# :http_handler => AWS::Http::EMHttpHandler.new(
|
21
|
-
# :pool_size => 20,
|
22
21
|
# :proxy => {:host => "http://myproxy.com",:port => 80}
|
23
22
|
# )
|
24
23
|
# )
|
@@ -27,14 +26,6 @@ module AWS
|
|
27
26
|
# @return [Hash] The default options to send to EM-Synchrony on each
|
28
27
|
# request.
|
29
28
|
attr_reader :default_request_options
|
30
|
-
@@pools = {}
|
31
|
-
|
32
|
-
def self.fetch_connection(url,pool_size)
|
33
|
-
@@pools[url] ||= EventMachine::Synchrony::ConnectionPool.new(size: pool_size) do
|
34
|
-
EM::HttpRequest.new(url)
|
35
|
-
end
|
36
|
-
@@pools[url]
|
37
|
-
end
|
38
29
|
|
39
30
|
# Constructs a new HTTP handler using EM-Synchrony.
|
40
31
|
#
|
@@ -48,16 +39,15 @@ module AWS
|
|
48
39
|
# Defaults pool_size to 5
|
49
40
|
def initialize options = {}
|
50
41
|
#puts "Using EM-Synchrony for AWS requests"
|
51
|
-
options[:pool_size] ||= 5
|
52
42
|
@default_request_options = options
|
53
43
|
end
|
54
44
|
|
55
45
|
def fetch_url(request)
|
56
46
|
url = nil
|
57
47
|
if request.use_ssl?
|
58
|
-
url = "https://#{request.host}:443"
|
48
|
+
url = "https://#{request.host}:443#{request.uri}"
|
59
49
|
else
|
60
|
-
url = "http://#{request.host}"
|
50
|
+
url = "http://#{request.host}#{request.uri}"
|
61
51
|
end
|
62
52
|
url
|
63
53
|
end
|
@@ -101,25 +91,15 @@ module AWS
|
|
101
91
|
# We get AWS::S3::SignatureDoesNotMatch when path is used to fetch an s3 object
|
102
92
|
# so for now we won't use the pool for requests where the path is more than just '/'
|
103
93
|
def fetch_response(url,method,opts={})
|
104
|
-
return EM::HttpRequest.new("#{url}
|
105
|
-
self.class.fetch_connection(url,@default_request_options[:pool_size]).send(method, opts)
|
106
|
-
end
|
107
|
-
|
108
|
-
# Add thread safety.
|
109
|
-
def _fibered_mutex
|
110
|
-
@fibered_mutex ||= EM::Synchrony::Thread::Mutex.new
|
94
|
+
return EM::HttpRequest.new("#{url}").send(method, opts)
|
111
95
|
end
|
112
|
-
|
96
|
+
|
113
97
|
def handle(request,response)
|
114
|
-
if EM::reactor_running?
|
115
|
-
|
116
|
-
handle_it(request, response)
|
117
|
-
end
|
98
|
+
if EM::reactor_running?
|
99
|
+
handle_it(request, response)
|
118
100
|
else
|
119
101
|
EM.synchrony do
|
120
|
-
|
121
|
-
handle_it(request, response)
|
122
|
-
end
|
102
|
+
handle_it(request, response)
|
123
103
|
EM.stop
|
124
104
|
end
|
125
105
|
end
|
@@ -127,14 +107,19 @@ module AWS
|
|
127
107
|
|
128
108
|
def handle_it(request, response)
|
129
109
|
#puts "Using EM!!!!"
|
130
|
-
opts = default_request_options.merge({
|
131
|
-
:body => request.body,
|
132
|
-
:path => request.uri,
|
133
|
-
|
134
|
-
}).merge(request_options(request))
|
135
|
-
url = fetch_url(request)
|
136
110
|
# get, post, put, delete, head
|
137
|
-
method = request.http_method.downcase
|
111
|
+
method = request.http_method.downcase.to_sym
|
112
|
+
|
113
|
+
opts = default_request_options.
|
114
|
+
merge(request_options(request))
|
115
|
+
if (method == :get)
|
116
|
+
opts[:query] = request.body
|
117
|
+
else
|
118
|
+
opts[:body] = request.body
|
119
|
+
end
|
120
|
+
|
121
|
+
url = fetch_url(request)
|
122
|
+
|
138
123
|
begin
|
139
124
|
http_response = fetch_response(url,method,opts)
|
140
125
|
rescue Timeout::Error, Errno::ETIMEDOUT => e
|
data/lib/em_aws/version.rb
CHANGED
@@ -48,17 +48,10 @@ module AWS::Core
|
|
48
48
|
end
|
49
49
|
|
50
50
|
describe '#initialize' do
|
51
|
-
|
52
51
|
it 'should set the default request options' do
|
53
52
|
described_class.new(:foo => "BAR").default_request_options.
|
54
|
-
should == { :foo => "BAR"
|
55
|
-
end
|
56
|
-
|
57
|
-
it 'should not override supplied pool_size' do
|
58
|
-
described_class.new(:pool_size => 20).default_request_options.
|
59
|
-
should == { :pool_size => 20 }
|
53
|
+
should == { :foo => "BAR" }
|
60
54
|
end
|
61
|
-
|
62
55
|
end
|
63
56
|
|
64
57
|
describe '#handle' do
|
@@ -160,4 +153,4 @@ module AWS::Core
|
|
160
153
|
end
|
161
154
|
end
|
162
155
|
end
|
163
|
-
end
|
156
|
+
end
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: em_aws
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.1.
|
4
|
+
version: 0.1.1
|
5
5
|
prerelease:
|
6
6
|
platform: ruby
|
7
7
|
authors:
|
@@ -13,7 +13,7 @@ date: 2012-04-11 00:00:00.000000000Z
|
|
13
13
|
dependencies:
|
14
14
|
- !ruby/object:Gem::Dependency
|
15
15
|
name: aws-sdk
|
16
|
-
requirement: &
|
16
|
+
requirement: &70103158270460 !ruby/object:Gem::Requirement
|
17
17
|
none: false
|
18
18
|
requirements:
|
19
19
|
- - ! '>='
|
@@ -21,10 +21,10 @@ dependencies:
|
|
21
21
|
version: '0'
|
22
22
|
type: :runtime
|
23
23
|
prerelease: false
|
24
|
-
version_requirements: *
|
24
|
+
version_requirements: *70103158270460
|
25
25
|
- !ruby/object:Gem::Dependency
|
26
26
|
name: em-synchrony
|
27
|
-
requirement: &
|
27
|
+
requirement: &70103158269980 !ruby/object:Gem::Requirement
|
28
28
|
none: false
|
29
29
|
requirements:
|
30
30
|
- - ! '>='
|
@@ -32,10 +32,10 @@ dependencies:
|
|
32
32
|
version: '0'
|
33
33
|
type: :runtime
|
34
34
|
prerelease: false
|
35
|
-
version_requirements: *
|
35
|
+
version_requirements: *70103158269980
|
36
36
|
- !ruby/object:Gem::Dependency
|
37
37
|
name: em-http-request
|
38
|
-
requirement: &
|
38
|
+
requirement: &70103158269520 !ruby/object:Gem::Requirement
|
39
39
|
none: false
|
40
40
|
requirements:
|
41
41
|
- - ! '>='
|
@@ -43,10 +43,10 @@ dependencies:
|
|
43
43
|
version: '0'
|
44
44
|
type: :runtime
|
45
45
|
prerelease: false
|
46
|
-
version_requirements: *
|
46
|
+
version_requirements: *70103158269520
|
47
47
|
- !ruby/object:Gem::Dependency
|
48
48
|
name: rspec
|
49
|
-
requirement: &
|
49
|
+
requirement: &70103158269100 !ruby/object:Gem::Requirement
|
50
50
|
none: false
|
51
51
|
requirements:
|
52
52
|
- - ! '>='
|
@@ -54,7 +54,7 @@ dependencies:
|
|
54
54
|
version: '0'
|
55
55
|
type: :development
|
56
56
|
prerelease: false
|
57
|
-
version_requirements: *
|
57
|
+
version_requirements: *70103158269100
|
58
58
|
description: Adds EM-Synchrony support to AWS-SDK gem
|
59
59
|
email:
|
60
60
|
- joshmckin@gmail.com
|