serverless-rack 1.0.1 → 1.0.6

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 CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 9e2ee06d74ace889ea61ad77a3c208075d81822482bed898d298bca6da2814d6
4
- data.tar.gz: f8e09735728d88f2dec09c3ae0fd934569120d51dc5c5e082223e2bce7aae32c
3
+ metadata.gz: 67c45bfb333ad3b27bd1d7f36e5b98ecc7ead2f27762a9ddc1c713b7d2cc5a9b
4
+ data.tar.gz: 9db88c7bf781a67032fb866886d443ff219140427ce1087e667d836a39f9271a
5
5
  SHA512:
6
- metadata.gz: da480222e126f675db95a97930f4b74b04553c2471d262d454db69121b5ffb76ea56d0c8b5bb5822b5ceb8d7c54fc106139de7c552cede33094c28f170eb8fd0
7
- data.tar.gz: 2d75c999716059e286376c8998663223d7eb4f834f195692bdf3609bd00499f15e4f24dee8b4d085efe4d33b08fffa0a4c91026c7c98addd3e2793088d57b1a7
6
+ metadata.gz: 1dbfe05405a816ae2a31e62a3046253f842616e72b3ca3aa0149e337f97d59e75127f3d513b657f2357e94c1c31a11701f352b2d82c75a22843f296dd388f988
7
+ data.tar.gz: 75b78e2e61ab8fcba27b75ac33c4cf328049b26ea97ff3480b4049e013d4b25d7a89c4e17896c57f08cd9f90ea53a6cdab196e97c1ba2d009888e32d23fc3bfd
@@ -1,3 +1,38 @@
1
+ # 1.0.6
2
+
3
+ - Upgrade dependencies
4
+ - Add a dockerImage config option to override the docker image to be used for compiling gems (defaults to the lambci ruby images) (#17)
5
+
6
+ _Benjamin Curtis_
7
+
8
+ - Cache the bundle that is created by docker to avoid recompiling gems (#17)
9
+
10
+ _Benjamin Curtis_
11
+
12
+ - Handle empty `API_GATEWAY_BASE_PATH` (#14)
13
+
14
+ _Joel Van Horn_
15
+
16
+ # 1.0.5
17
+
18
+ - Upgrade dependencies
19
+
20
+ # 1.0.4
21
+
22
+ - Support `configPath` option when invoking `sls rack serve` (#5)
23
+
24
+ # 1.0.3
25
+
26
+ - Upgrade dependencies
27
+
28
+ # 1.0.2
29
+
30
+ - Remove `BUNDLED WITH` from Gemfile to allow using different version of
31
+ Bundler from the one provided by AWS Lambda (#3)
32
+ - Add `configPath` option for setting path to `config.ru` (#4)
33
+
34
+ _Yousaf Nabi_
35
+
1
36
  # 1.0.1
2
37
 
3
38
  - Support additional bundler arguments to be passed when using docker (#2)
data/README.md CHANGED
@@ -139,13 +139,23 @@ For more information, see https://bundler.io/docs.html.
139
139
 
140
140
  If your application depends on any gems that include compiled binaries, these
141
141
  must be compiled for the lambda execution environment. Enabling the `dockerizeBundler` configuration
142
- option will fetch and build the gems using a [docker image](https://hub.docker.com/r/logandk/serverless-rack-bundler)
143
- that emulates the lambda environment:
142
+ option will fetch and build the gems using a docker image that emulates the lambda environment:
144
143
 
145
144
  ```yaml
146
145
  custom:
147
146
  rack:
148
- dockerizeBundler: false
147
+ dockerizeBundler: true
148
+ ```
149
+
150
+ The default docker image that will be used will match the runtime you are using.
151
+ That is, if you are using the `ruby2.7` runtime, then the docker image will be
152
+ `logandk/serverless-rack-bundler:ruby2.7`. You can override the docker image with the
153
+ `dockerImage` configuration option:
154
+
155
+ ```yaml
156
+ custom:
157
+ rack:
158
+ dockerImage: lambci/lambda:build-ruby2.5
149
159
  ```
150
160
 
151
161
  ### Bundler configuration
@@ -181,6 +191,17 @@ custom:
181
191
  bundlerBin: /path/to/bundler
182
192
  ```
183
193
 
194
+ ### Rack configuration file
195
+
196
+ If your Rack configuration file (`config.ru`) is not in `./`, set the path explicitly using the `configPath`
197
+ configuration option:
198
+
199
+ ```yaml
200
+ custom:
201
+ rack:
202
+ configPath: path/to/config.ru
203
+ ```
204
+
184
205
  ### Local server
185
206
 
186
207
  For convenience, a `sls rack serve` command is provided to run your Rack application
@@ -208,6 +229,8 @@ $ sls rack serve -p 8000
208
229
  When running locally, an environment variable named `IS_OFFLINE` will be set to `True`.
209
230
  So, if you want to know when the application is running locally, check `ENV["IS_OFFLINE"]`.
210
231
 
232
+ For use with the `serverless-offline` plugin, run `sls rack install` prior to `sls offline`.
233
+
211
234
  ### Remote command execution
212
235
 
213
236
  The `rack exec` command lets you execute ruby code remotely:
@@ -15,17 +15,19 @@ TEXT_MIME_TYPES = [
15
15
  'image/svg+xml'
16
16
  ].freeze
17
17
 
18
+ def base_path
19
+ "/#{ENV['API_GATEWAY_BASE_PATH']}" unless ENV['API_GATEWAY_BASE_PATH'].to_s.empty?
20
+ end
21
+
18
22
  def keepalive_event?(event)
19
23
  ['aws.events', 'serverless-plugin-warmup'].include?(event['source'])
20
24
  end
21
25
 
22
26
  def parse_script_name(event, headers)
23
- if ENV['API_GATEWAY_BASE_PATH']
24
- "/#{ENV['API_GATEWAY_BASE_PATH']}"
25
- elsif (headers['Host'] || '').include?('amazonaws.com')
27
+ if base_path.nil? && (headers['Host'] || '').include?('amazonaws.com')
26
28
  "/#{event['requestContext']['stage']}"
27
29
  else
28
- ''
30
+ base_path.to_s
29
31
  end
30
32
  end
31
33
 
@@ -33,12 +35,11 @@ def parse_path_info(event)
33
35
  # If a user is using a custom domain on API Gateway, they may have a base
34
36
  # path in their URL. This allows us to strip it out via an optional
35
37
  # environment variable.
36
- if ENV['API_GATEWAY_BASE_PATH']
37
- base_path = "/#{ENV['API_GATEWAY_BASE_PATH']}"
38
- return event['path'][base_path.length..-1] if event['path'].start_with?(base_path)
38
+ if base_path && event['path'].start_with?(base_path)
39
+ event['path'][base_path.length..-1]
40
+ else
41
+ event['path']
39
42
  end
40
-
41
- event['path']
42
43
  end
43
44
 
44
45
  def parse_query_string(event)
@@ -59,9 +60,11 @@ end
59
60
 
60
61
  def parse_headers(event)
61
62
  if event.include? 'multiValueHeaders'
62
- Rack::Utils::HeaderHash.new((event['multiValueHeaders'] || {}).map do |key, value|
63
- [key, value.join("\n")]
64
- end.to_h)
63
+ Rack::Utils::HeaderHash.new(
64
+ (event['multiValueHeaders'] || {}).transform_values do |value|
65
+ value.join("\n")
66
+ end
67
+ )
65
68
  else
66
69
  Rack::Utils::HeaderHash.new(event['headers'] || {})
67
70
  end
@@ -166,11 +169,12 @@ end
166
169
 
167
170
  def format_split_headers(headers:)
168
171
  headers = headers.to_hash
172
+ keys = headers.keys
169
173
 
170
174
  # If there are headers multiple occurrences, e.g. Set-Cookie, create
171
175
  # case-mutated variations in order to pass them through APIGW.
172
176
  # This is a hack that's currently needed.
173
- headers.keys.each do |key|
177
+ keys.each do |key|
174
178
  values = headers[key].split("\n")
175
179
 
176
180
  next if values.size < 2
@@ -187,9 +191,9 @@ def format_split_headers(headers:)
187
191
  end
188
192
 
189
193
  def format_grouped_headers(headers:)
190
- { 'multiValueHeaders' => headers.map do |key, value|
191
- [key, value.split("\n")]
192
- end.to_h }
194
+ { 'multiValueHeaders' => headers.transform_values do |value|
195
+ value.split("\n")
196
+ end }
193
197
  end
194
198
 
195
199
  def format_response(event:, status:, headers:, body:, text_mime_types:)
@@ -1,6 +1,8 @@
1
+ # frozen_string_literal: true
2
+
1
3
  Gem::Specification.new do |s|
2
4
  s.name = 'serverless-rack'
3
- s.version = '1.0.1'
5
+ s.version = '1.0.6'
4
6
  s.summary =
5
7
  'Serverless plugin to deploy Ruby Rack applications (Sinatra/Padrino/Cuba etc.) '\
6
8
  'and bundle gems'
@@ -21,6 +23,6 @@ Gem::Specification.new do |s|
21
23
  s.homepage = 'https://github.com/logandk/serverless-rack'
22
24
  s.license = 'MIT'
23
25
 
24
- s.required_ruby_version = '>= 2.2.0'
26
+ s.required_ruby_version = '>= 2.4.0'
25
27
  s.add_dependency 'rack', '~> 2.0'
26
28
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: serverless-rack
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.0.1
4
+ version: 1.0.6
5
5
  platform: ruby
6
6
  authors:
7
7
  - Logan Raarup
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2019-03-24 00:00:00.000000000 Z
11
+ date: 2020-10-24 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: rack
@@ -50,15 +50,14 @@ required_ruby_version: !ruby/object:Gem::Requirement
50
50
  requirements:
51
51
  - - ">="
52
52
  - !ruby/object:Gem::Version
53
- version: 2.2.0
53
+ version: 2.4.0
54
54
  required_rubygems_version: !ruby/object:Gem::Requirement
55
55
  requirements:
56
56
  - - ">="
57
57
  - !ruby/object:Gem::Version
58
58
  version: '0'
59
59
  requirements: []
60
- rubyforge_project:
61
- rubygems_version: 2.7.6
60
+ rubygems_version: 3.1.2
62
61
  signing_key:
63
62
  specification_version: 4
64
63
  summary: Serverless plugin to deploy Ruby Rack applications (Sinatra/Padrino/Cuba