slowpoke 0.3.0 → 0.3.1
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/CHANGELOG.md +10 -6
- data/README.md +29 -4
- data/lib/slowpoke.rb +5 -7
- data/lib/slowpoke/railtie.rb +13 -3
- data/lib/slowpoke/timeout.rb +18 -0
- data/lib/slowpoke/version.rb +1 -1
- metadata +3 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 5001012d6c99301ae24d91ab6d400e68d3bba3194829645bcd9334e05c630793
|
4
|
+
data.tar.gz: 750108765f01af869c4ed46796ce015dc9b8b82dd0f3f3f669387850ccc561d4
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: be064a8afb4a84a37dc7282300a510a769dda19283b7a2d1f71867e10f4361ea333d8ff9aa414c3346be8da2abde724aa5376b685a2e137850189b3c33ba4842
|
7
|
+
data.tar.gz: e468660cfb1c056c10fa41cea26fc116802fb7aefde498c831bbf56b4bc76460925bb1c6f3be7f9a7f9f5a1f6344df5f42dd9808c9fda806caea2565cdce4420
|
data/CHANGELOG.md
CHANGED
@@ -1,31 +1,35 @@
|
|
1
|
-
## 0.3.
|
1
|
+
## 0.3.1 (2019-12-10)
|
2
|
+
|
3
|
+
- Added support for conditional timeouts
|
4
|
+
|
5
|
+
## 0.3.0 (2019-05-31)
|
2
6
|
|
3
7
|
- Use proper signal for Puma
|
4
8
|
- Dropped support for rack-timeout < 0.4
|
5
9
|
- Dropped support for migration timeouts
|
6
10
|
- Dropped support for Rails < 5
|
7
11
|
|
8
|
-
## 0.2.1
|
12
|
+
## 0.2.1 (2018-05-21)
|
9
13
|
|
10
14
|
- Don’t kill server in test environment
|
11
15
|
- Require rack-timeout < 0.5
|
12
16
|
|
13
|
-
## 0.2.0
|
17
|
+
## 0.2.0 (2017-11-05)
|
14
18
|
|
15
19
|
- Fixed custom error pages for Rails 5.1
|
16
20
|
- Fixed migration statement timeout
|
17
21
|
- Don’t kill server in development
|
18
22
|
|
19
|
-
## 0.1.3
|
23
|
+
## 0.1.3 (2016-08-03)
|
20
24
|
|
21
25
|
- Fixed deprecation warning in Rails 5
|
22
26
|
- No longer requires ActiveRecord
|
23
27
|
|
24
|
-
## 0.1.2
|
28
|
+
## 0.1.2 (2016-02-10)
|
25
29
|
|
26
30
|
- Updated to latest version of rack-timeout, removing the need to bubble timeouts
|
27
31
|
|
28
|
-
## 0.1.1
|
32
|
+
## 0.1.1 (2015-08-02)
|
29
33
|
|
30
34
|
- Fixed safer service timeouts
|
31
35
|
- Added migration statement timeout
|
data/README.md
CHANGED
@@ -2,6 +2,7 @@
|
|
2
2
|
|
3
3
|
[Rack::Timeout](https://github.com/heroku/rack-timeout) enhancements for Rails
|
4
4
|
|
5
|
+
- conditional timeouts
|
5
6
|
- custom error pages
|
6
7
|
- [safer service timeouts](https://github.com/heroku/rack-timeout/issues/39)
|
7
8
|
|
@@ -21,9 +22,9 @@ rails generate slowpoke:install
|
|
21
22
|
|
22
23
|
This creates a `public/503.html` you can customize.
|
23
24
|
|
24
|
-
##
|
25
|
+
## Development
|
25
26
|
|
26
|
-
|
27
|
+
To try out custom error pages in development, temporarily add to `config/environments/development.rb`:
|
27
28
|
|
28
29
|
```ruby
|
29
30
|
config.slowpoke.timeout = 1
|
@@ -38,7 +39,7 @@ sleep(2)
|
|
38
39
|
|
39
40
|
The custom error page should appear.
|
40
41
|
|
41
|
-
##
|
42
|
+
## Production
|
42
43
|
|
43
44
|
The default timeout is 15 seconds. You can change this in `config/environments/production.rb` with:
|
44
45
|
|
@@ -46,6 +47,15 @@ The default timeout is 15 seconds. You can change this in `config/environments/p
|
|
46
47
|
config.slowpoke.timeout = 5
|
47
48
|
```
|
48
49
|
|
50
|
+
For conditional timeouts, use:
|
51
|
+
|
52
|
+
```ruby
|
53
|
+
config.slowpoke.timeout = lambda do |env|
|
54
|
+
request = Rack::Request.new(env)
|
55
|
+
request.path.start_with?("/admin") ? 15 : 5
|
56
|
+
end
|
57
|
+
```
|
58
|
+
|
49
59
|
Subscribe to timeouts with:
|
50
60
|
|
51
61
|
```ruby
|
@@ -62,7 +72,14 @@ The only safe way to recover from a request timeout is to spawn a new process. F
|
|
62
72
|
|
63
73
|
## Database Timeouts
|
64
74
|
|
65
|
-
It’s a good idea to set a [statement timeout](https://github.com/ankane/the-ultimate-guide-to-ruby-timeouts/#statement-timeouts-1) and a [connect timeout](https://github.com/ankane/the-ultimate-guide-to-ruby-timeouts/#activerecord).
|
75
|
+
It’s a good idea to set a [statement timeout](https://github.com/ankane/the-ultimate-guide-to-ruby-timeouts/#statement-timeouts-1) and a [connect timeout](https://github.com/ankane/the-ultimate-guide-to-ruby-timeouts/#activerecord). For Postgres, your `config/database.yml` should include something like:
|
76
|
+
|
77
|
+
```yml
|
78
|
+
production:
|
79
|
+
connect_timeout: 3 # sec
|
80
|
+
variables:
|
81
|
+
statement_timeout: 5s
|
82
|
+
```
|
66
83
|
|
67
84
|
## Upgrading
|
68
85
|
|
@@ -104,3 +121,11 @@ Everyone is encouraged to help improve this project. Here are a few ways you can
|
|
104
121
|
- Fix bugs and [submit pull requests](https://github.com/ankane/slowpoke/pulls)
|
105
122
|
- Write, clarify, or fix documentation
|
106
123
|
- Suggest or add new features
|
124
|
+
|
125
|
+
To get started with development:
|
126
|
+
|
127
|
+
```sh
|
128
|
+
git clone https://github.com/ankane/slowpoke.git
|
129
|
+
cd slowpoke
|
130
|
+
bundle install
|
131
|
+
```
|
data/lib/slowpoke.rb
CHANGED
@@ -1,18 +1,16 @@
|
|
1
|
-
|
1
|
+
# dependencies
|
2
2
|
require "rack/timeout/base"
|
3
|
+
|
4
|
+
# modules
|
3
5
|
require "slowpoke/middleware"
|
4
6
|
require "slowpoke/railtie"
|
5
|
-
require "
|
6
|
-
require "
|
7
|
+
require "slowpoke/timeout"
|
8
|
+
require "slowpoke/version"
|
7
9
|
|
8
10
|
module Slowpoke
|
9
11
|
ENV_KEY = "slowpoke.timed_out".freeze
|
10
12
|
end
|
11
13
|
|
12
|
-
# custom error page
|
13
|
-
ActionDispatch::ExceptionWrapper.rescue_responses["Rack::Timeout::RequestTimeoutError"] = :service_unavailable
|
14
|
-
ActionDispatch::ExceptionWrapper.rescue_responses["Rack::Timeout::RequestExpiryError"] = :service_unavailable
|
15
|
-
|
16
14
|
# remove noisy logger
|
17
15
|
Rack::Timeout.unregister_state_change_observer(:logger)
|
18
16
|
|
data/lib/slowpoke/railtie.rb
CHANGED
@@ -2,13 +2,23 @@ module Slowpoke
|
|
2
2
|
class Railtie < Rails::Railtie
|
3
3
|
config.slowpoke = ActiveSupport::OrderedOptions.new
|
4
4
|
|
5
|
+
# must happen outside initializer (so it runs earlier)
|
6
|
+
config.action_dispatch.rescue_responses.merge!(
|
7
|
+
"Rack::Timeout::RequestTimeoutError" => :service_unavailable,
|
8
|
+
"Rack::Timeout::RequestExpiryError" => :service_unavailable
|
9
|
+
)
|
10
|
+
|
5
11
|
initializer "slowpoke" do |app|
|
6
12
|
service_timeout = app.config.slowpoke.timeout
|
7
13
|
service_timeout ||= ENV["RACK_TIMEOUT_SERVICE_TIMEOUT"] || ENV["REQUEST_TIMEOUT"] || ENV["TIMEOUT"] || 15
|
8
|
-
service_timeout = service_timeout.to_i
|
9
14
|
|
10
|
-
|
11
|
-
|
15
|
+
if service_timeout.respond_to?(:call)
|
16
|
+
app.config.middleware.insert_after ActionDispatch::DebugExceptions, Slowpoke::Timeout,
|
17
|
+
service_timeout: service_timeout
|
18
|
+
else
|
19
|
+
app.config.middleware.insert_after ActionDispatch::DebugExceptions, Rack::Timeout,
|
20
|
+
service_timeout: service_timeout.to_i
|
21
|
+
end
|
12
22
|
|
13
23
|
app.config.middleware.insert(0, Slowpoke::Middleware) unless Rails.env.development? || Rails.env.test?
|
14
24
|
end
|
@@ -0,0 +1,18 @@
|
|
1
|
+
module Slowpoke
|
2
|
+
class Timeout
|
3
|
+
def initialize(app, service_timeout:)
|
4
|
+
@app = app
|
5
|
+
@service_timeout = service_timeout
|
6
|
+
@middleware = {}
|
7
|
+
end
|
8
|
+
|
9
|
+
def call(env)
|
10
|
+
service_timeout = @service_timeout.call(env)
|
11
|
+
if service_timeout
|
12
|
+
(@middleware[service_timeout] ||= Rack::Timeout.new(@app, service_timeout: service_timeout)).call(env)
|
13
|
+
else
|
14
|
+
@app.call(env)
|
15
|
+
end
|
16
|
+
end
|
17
|
+
end
|
18
|
+
end
|
data/lib/slowpoke/version.rb
CHANGED
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: slowpoke
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.3.
|
4
|
+
version: 0.3.1
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Andrew Kane
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2019-
|
11
|
+
date: 2019-12-11 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: railties
|
@@ -94,6 +94,7 @@ files:
|
|
94
94
|
- lib/slowpoke.rb
|
95
95
|
- lib/slowpoke/middleware.rb
|
96
96
|
- lib/slowpoke/railtie.rb
|
97
|
+
- lib/slowpoke/timeout.rb
|
97
98
|
- lib/slowpoke/version.rb
|
98
99
|
homepage: https://github.com/ankane/slowpoke
|
99
100
|
licenses:
|