rainbows 5.1.1 → 5.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.
- checksums.yaml +5 -5
- data/.olddoc.yml +1 -1
- data/GIT-VERSION-GEN +1 -1
- data/HACKING +3 -3
- data/README +10 -10
- data/lib/rainbows/app_pool.rb +2 -2
- data/lib/rainbows/base.rb +2 -2
- data/lib/rainbows/configurator.rb +2 -2
- data/lib/rainbows/coolio/client.rb +4 -4
- data/lib/rainbows/coolio/thread_client.rb +2 -2
- data/lib/rainbows/epoll/client.rb +15 -15
- data/lib/rainbows/epoll/response_pipe.rb +3 -3
- data/lib/rainbows/error.rb +3 -3
- data/lib/rainbows/ev_core.rb +4 -4
- data/lib/rainbows/fiber/body.rb +2 -2
- data/lib/rainbows/fiber/io.rb +2 -2
- data/lib/rainbows/http_server.rb +4 -4
- data/lib/rainbows/process_client.rb +2 -2
- data/lib/rainbows/response.rb +8 -8
- data/lib/rainbows/revactor.rb +2 -2
- data/lib/rainbows/revactor/client/methods.rb +2 -2
- data/lib/rainbows/revactor/client/tee_socket.rb +1 -1
- data/lib/rainbows/reverse_proxy/coolio.rb +11 -11
- data/lib/rainbows/stream_response_epoll/client.rb +3 -3
- data/lib/rainbows/thread_timeout.rb +5 -5
- data/lib/rainbows/xepoll/client.rb +2 -2
- data/lib/rainbows/xepoll_thread_pool/client.rb +4 -4
- data/lib/rainbows/xepoll_thread_spawn/client.rb +4 -4
- data/rainbows.gemspec +20 -13
- data/t/bin/unused_listen +1 -1
- data/t/hijack.ru +3 -3
- data/t/sha1-random-size.ru +1 -1
- data/t/test_isolate.rb +5 -5
- metadata +11 -20
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
|
-
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
2
|
+
SHA256:
|
3
|
+
metadata.gz: c32acc2fd11a17dd204cc22e7d8aedab4c0e14d1b07013d6ee1c0c35d6a2018d
|
4
|
+
data.tar.gz: a63584f7b9b1622c292d1dde98d9c70c45a9fce1d5b550fafae42d24c80aff4d
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 8e2b64730662047ddb95b124e4c88816129e0a7fc12e92d38763eb09da69ebdc7baa1a7bf6f9ed9b6c162ab513a77a49a641e6afacb6421ccb15bc4bb6be314f
|
7
|
+
data.tar.gz: 9af900df457b11b8e7f35ef423e5814265fd31494c3d7e097567b043acaa7c92ba245f9b87432529e40ddff9f166e6e2fe91d45931570caebf95a28577de9b62
|
data/.olddoc.yml
CHANGED
data/GIT-VERSION-GEN
CHANGED
data/HACKING
CHANGED
@@ -44,12 +44,12 @@ Please Cc: everyone on replies, as not everyone is subscribed.
|
|
44
44
|
|
45
45
|
== Building a Gem
|
46
46
|
|
47
|
-
In order to build the gem, you must install the following components
|
47
|
+
In order to build the gem, you must install the following components
|
48
|
+
for documentation:
|
48
49
|
|
49
|
-
* olddoc (RubyGem)
|
50
50
|
* pandoc
|
51
51
|
|
52
|
-
You can build the
|
52
|
+
You can build the Rainbows! gem with the following command:
|
53
53
|
|
54
54
|
gmake gem
|
55
55
|
|
data/README
CHANGED
@@ -1,4 +1,4 @@
|
|
1
|
-
= Rainbows! -
|
1
|
+
= Rainbows! - Rack app server for sleepy apps and slow clients
|
2
2
|
|
3
3
|
\Rainbows! is an HTTP server for sleepy Rack applications. It is based on
|
4
4
|
unicorn, but designed to handle applications that expect long
|
@@ -51,7 +51,7 @@ network concurrency.
|
|
51
51
|
* Designed for {Rack}[http://rack.github.io/], the standard for
|
52
52
|
modern Ruby HTTP applications.
|
53
53
|
|
54
|
-
* Built on {
|
54
|
+
* Built on {unicorn}[https://bogomips.org/unicorn/], inheriting its
|
55
55
|
process/socket management features such as transparent upgrades and
|
56
56
|
Ruby configuration DSL.
|
57
57
|
|
@@ -81,7 +81,6 @@ network concurrency.
|
|
81
81
|
* HTTP server push
|
82
82
|
* Long polling
|
83
83
|
* Reverse AJAX
|
84
|
-
* real-time upload processing (via {upr}[http://upr.bogomips.org/])
|
85
84
|
|
86
85
|
\Rainbows! can also be used to service slow clients directly even with
|
87
86
|
fast applications.
|
@@ -123,7 +122,7 @@ config file:
|
|
123
122
|
|
124
123
|
worker_processes 4 # assuming four CPU cores
|
125
124
|
Rainbows! do
|
126
|
-
use :
|
125
|
+
use :ThreadSpawn
|
127
126
|
worker_connections 100
|
128
127
|
end
|
129
128
|
|
@@ -136,23 +135,24 @@ for more details.
|
|
136
135
|
You can get the latest source via git from the following locations
|
137
136
|
(these versions may not be stable):
|
138
137
|
|
139
|
-
|
140
|
-
|
138
|
+
https://bogomips.org/rainbows.git
|
139
|
+
https://repo.or.cz/rainbows.git (mirror)
|
141
140
|
|
142
141
|
You may browse the code from the web and download the latest snapshot
|
143
142
|
tarballs here:
|
144
143
|
|
145
144
|
* https://bogomips.org/rainbows.git
|
146
|
-
*
|
145
|
+
* https://repo.or.cz/rainbows.git (gitweb)
|
147
146
|
|
148
147
|
Inline patches (from "git format-patch") to the mailing list are
|
149
148
|
preferred because they allow code review and comments in the reply to
|
150
149
|
the patch.
|
151
150
|
|
152
151
|
We will adhere to mostly the same conventions for patch submissions as
|
153
|
-
git itself. See the
|
154
|
-
|
155
|
-
|
152
|
+
git itself. See the
|
153
|
+
https://80x24.org/mirrors/git.git/tree/Documentation/SubmittingPatches?h=v2.20.1
|
154
|
+
document distributed with git on on patch submission guidelines to follow.
|
155
|
+
Just don't email the git mailing list or maintainer with \Rainbows! patches.
|
156
156
|
|
157
157
|
== Disclaimer
|
158
158
|
|
data/lib/rainbows/app_pool.rb
CHANGED
data/lib/rainbows/base.rb
CHANGED
@@ -49,8 +49,8 @@ def reopen_worker_logs(worker_nr)
|
|
49
49
|
logger.info "worker=#{worker_nr} reopening logs..."
|
50
50
|
Unicorn::Util.reopen_logs
|
51
51
|
logger.info "worker=#{worker_nr} done reopening logs"
|
52
|
-
|
53
|
-
|
52
|
+
rescue
|
53
|
+
Rainbows.quit! # let the master reopen and refork us
|
54
54
|
end
|
55
55
|
# :startdoc:
|
56
56
|
end
|
@@ -160,8 +160,8 @@ def on_write_complete
|
|
160
160
|
on_read(''.freeze)
|
161
161
|
end
|
162
162
|
end
|
163
|
-
|
164
|
-
|
163
|
+
rescue => e
|
164
|
+
handle_error(e)
|
165
165
|
end
|
166
166
|
|
167
167
|
def handle_error(e)
|
@@ -170,8 +170,8 @@ def handle_error(e)
|
|
170
170
|
@_io.kgio_trywrite(msg) rescue nil
|
171
171
|
end
|
172
172
|
@_write_buffer.clear
|
173
|
-
|
174
|
-
|
173
|
+
ensure
|
174
|
+
quit
|
175
175
|
end
|
176
176
|
|
177
177
|
def close_deferred
|
@@ -16,8 +16,8 @@ def app_call input
|
|
16
16
|
def response_write(response)
|
17
17
|
return hijacked if @hp.hijacked?
|
18
18
|
ev_write_response(*response, @hp.next?)
|
19
|
-
|
20
|
-
|
19
|
+
rescue => e
|
20
|
+
handle_error(e)
|
21
21
|
end
|
22
22
|
|
23
23
|
# fails-safe application dispatch, we absolutely cannot
|
@@ -39,8 +39,8 @@ def epoll_once
|
|
39
39
|
@wr_queue = [] # may contain String, ResponsePipe, and StreamFile objects
|
40
40
|
post_init
|
41
41
|
on_readable
|
42
|
-
|
43
|
-
|
42
|
+
rescue => e
|
43
|
+
handle_error(e)
|
44
44
|
end
|
45
45
|
|
46
46
|
def on_readable
|
@@ -56,9 +56,9 @@ def on_readable
|
|
56
56
|
break
|
57
57
|
end until :close == @state
|
58
58
|
close unless closed?
|
59
|
-
|
60
|
-
|
61
|
-
|
59
|
+
rescue Errno::ECONNRESET
|
60
|
+
close
|
61
|
+
rescue IOError
|
62
62
|
end
|
63
63
|
|
64
64
|
def app_call input # called by on_read()
|
@@ -146,8 +146,8 @@ def on_deferred_write_complete
|
|
146
146
|
|
147
147
|
def handle_error(e)
|
148
148
|
msg = Rainbows::Error.response(e) and kgio_trywrite(msg) rescue nil
|
149
|
-
|
150
|
-
|
149
|
+
ensure
|
150
|
+
close
|
151
151
|
end
|
152
152
|
|
153
153
|
def write_deferred(obj)
|
@@ -171,8 +171,8 @@ def on_writable
|
|
171
171
|
when :deferred
|
172
172
|
return
|
173
173
|
end while true
|
174
|
-
|
175
|
-
|
174
|
+
rescue => e
|
175
|
+
handle_error(e)
|
176
176
|
end
|
177
177
|
|
178
178
|
def write(buf)
|
@@ -227,9 +227,9 @@ def stream_file(sf) # +sf+ is a Rainbows::StreamFile object
|
|
227
227
|
else
|
228
228
|
return n # :wait_writable or nil
|
229
229
|
end while true
|
230
|
-
|
231
|
-
|
232
|
-
|
230
|
+
rescue
|
231
|
+
sf.close
|
232
|
+
raise
|
233
233
|
end
|
234
234
|
|
235
235
|
def defer_file_stream(offset, count, io, body)
|
@@ -263,8 +263,8 @@ def stream_pipe(pipe)
|
|
263
263
|
else # nil => EOF
|
264
264
|
return pipe.close # nil
|
265
265
|
end while true
|
266
|
-
|
267
|
-
|
268
|
-
|
266
|
+
rescue
|
267
|
+
pipe.close
|
268
|
+
raise
|
269
269
|
end
|
270
270
|
end
|
@@ -14,9 +14,9 @@ def initialize(io, client, body)
|
|
14
14
|
def epoll_run
|
15
15
|
return close if @client.closed?
|
16
16
|
@client.stream_pipe(self) or @client.on_deferred_write_complete
|
17
|
-
|
18
|
-
|
19
|
-
|
17
|
+
rescue => e
|
18
|
+
close
|
19
|
+
@client.handle_error(e)
|
20
20
|
end
|
21
21
|
|
22
22
|
def close
|
data/lib/rainbows/error.rb
CHANGED
@@ -8,18 +8,18 @@ module Rainbows::Error
|
|
8
8
|
# the socket is closed at the end of this function
|
9
9
|
def self.write(io, e)
|
10
10
|
msg = response(e) and Kgio.trywrite(io, msg)
|
11
|
-
|
11
|
+
rescue
|
12
12
|
end
|
13
13
|
|
14
14
|
def self.app(e)
|
15
15
|
Unicorn.log_error(Rainbows.server.logger, "app error", e)
|
16
|
-
|
16
|
+
rescue
|
17
17
|
end
|
18
18
|
|
19
19
|
def self.listen_loop(e)
|
20
20
|
Rainbows.alive or return
|
21
21
|
Unicorn.log_error(Rainbows.server.logger, "listen loop error", e)
|
22
|
-
|
22
|
+
rescue
|
23
23
|
end
|
24
24
|
|
25
25
|
def self.response(e)
|
data/lib/rainbows/ev_core.rb
CHANGED
@@ -43,8 +43,8 @@ def want_more
|
|
43
43
|
|
44
44
|
def handle_error(e)
|
45
45
|
msg = Rainbows::Error.response(e) and write(msg)
|
46
|
-
|
47
|
-
|
46
|
+
ensure
|
47
|
+
quit
|
48
48
|
end
|
49
49
|
|
50
50
|
# returns whether to enable response chunking for autochunk models
|
@@ -119,8 +119,8 @@ def on_read(data)
|
|
119
119
|
want_more
|
120
120
|
end
|
121
121
|
end
|
122
|
-
|
123
|
-
|
122
|
+
rescue => e
|
123
|
+
handle_error(e)
|
124
124
|
end
|
125
125
|
|
126
126
|
def err_413(msg)
|
data/lib/rainbows/fiber/body.rb
CHANGED
data/lib/rainbows/fiber/io.rb
CHANGED
data/lib/rainbows/http_server.rb
CHANGED
@@ -71,10 +71,10 @@ def trysetrlimit(resource, want)
|
|
71
71
|
@logger.warn "#{svc} may monopolize resources dictated by #{resource}" \
|
72
72
|
" and leave none for your app"
|
73
73
|
end
|
74
|
-
|
75
|
-
|
76
|
-
|
77
|
-
|
74
|
+
rescue => e
|
75
|
+
@logger.error e.message
|
76
|
+
@logger.error "#{resource} needs to be increased to >=#{want} before" \
|
77
|
+
" starting #{svc}"
|
78
78
|
end
|
79
79
|
|
80
80
|
def svc
|
@@ -83,8 +83,8 @@ def process_pipeline(env, hp)
|
|
83
83
|
write_response(status, headers, body, alive = hp.next?) or return
|
84
84
|
end while alive && pipeline_ready(hp)
|
85
85
|
alive or close
|
86
|
-
|
87
|
-
|
86
|
+
rescue => e
|
87
|
+
handle_error(e)
|
88
88
|
end
|
89
89
|
|
90
90
|
# override this in subclass/module
|
data/lib/rainbows/response.rb
CHANGED
@@ -91,8 +91,8 @@ def write_response(status, headers, body, alive)
|
|
91
91
|
body = write_headers(status, headers, alive, body)
|
92
92
|
write_body_each(body) if body
|
93
93
|
body
|
94
|
-
|
95
|
-
|
94
|
+
ensure
|
95
|
+
body.close if body.respond_to?(:close)
|
96
96
|
end
|
97
97
|
end
|
98
98
|
include Each
|
@@ -102,8 +102,8 @@ module Sendfile
|
|
102
102
|
def write_body_file(body, range)
|
103
103
|
io = body_to_io(body)
|
104
104
|
range ? sendfile(io, range[0], range[1]) : sendfile(io, 0)
|
105
|
-
|
106
|
-
|
105
|
+
ensure
|
106
|
+
close_if_private(io)
|
107
107
|
end
|
108
108
|
end
|
109
109
|
include Sendfile
|
@@ -129,8 +129,8 @@ def write_body_file(body, range)
|
|
129
129
|
# isn't used or available.
|
130
130
|
def write_body_stream(body)
|
131
131
|
COPY_STREAM.copy_stream(io = body_to_io(body), self)
|
132
|
-
|
133
|
-
|
132
|
+
ensure
|
133
|
+
close_if_private(io)
|
134
134
|
end
|
135
135
|
else # ! COPY_STREAM
|
136
136
|
alias write_body_stream write_body_each
|
@@ -199,8 +199,8 @@ def write_response_path(status, headers, body, alive)
|
|
199
199
|
write_body_stream(body) if body
|
200
200
|
end
|
201
201
|
body
|
202
|
-
|
203
|
-
|
202
|
+
ensure
|
203
|
+
body.close if body.respond_to?(:close)
|
204
204
|
end
|
205
205
|
|
206
206
|
module ToPath
|
data/lib/rainbows/revactor.rb
CHANGED
@@ -75,8 +75,8 @@ def worker_loop(worker) #:nodoc:
|
|
75
75
|
end
|
76
76
|
|
77
77
|
Actor.sleep 1 while Rainbows.tick || nr > 0
|
78
|
-
|
79
|
-
|
78
|
+
rescue Errno::EMFILE
|
79
|
+
# ignore, let another worker process take it
|
80
80
|
end
|
81
81
|
|
82
82
|
def revactorize_listeners #:nodoc:
|
@@ -36,17 +36,17 @@ def on_readable
|
|
36
36
|
return close
|
37
37
|
end while true # we always read until EAGAIN or EOF
|
38
38
|
|
39
|
-
|
40
|
-
|
41
|
-
|
42
|
-
|
43
|
-
|
44
|
-
|
45
|
-
|
46
|
-
|
47
|
-
|
48
|
-
|
49
|
-
|
39
|
+
rescue => e
|
40
|
+
case e
|
41
|
+
when Errno::ECONNRESET
|
42
|
+
@env['async.callback'].call(@response)
|
43
|
+
return close
|
44
|
+
when SystemCallError
|
45
|
+
else
|
46
|
+
Unicorn.log_error(@env["rack.logger"], "on_readable", e)
|
47
|
+
end
|
48
|
+
@env['async.callback'].call(Rainbows::ReverseProxy::E502)
|
49
|
+
close
|
50
50
|
end
|
51
51
|
end
|
52
52
|
|
@@ -134,11 +134,11 @@ def call(env)
|
|
134
134
|
@lock.synchronize { @active.delete(Thread.current) }
|
135
135
|
# Thread#raise no longer possible here
|
136
136
|
end
|
137
|
-
|
138
|
-
|
139
|
-
|
140
|
-
|
141
|
-
|
137
|
+
rescue ExecutionExpired
|
138
|
+
# If we got here, it's because the watchdog thread raised an exception
|
139
|
+
# here to kill us. The watchdog uses @active.delete_if with a lock,
|
140
|
+
# so we guaranteed it's
|
141
|
+
[ 408, { 'Content-Type' => 'text/plain', 'Content-Length' => '0' }, [] ]
|
142
142
|
end
|
143
143
|
|
144
144
|
# The watchdog thread is the one that does the job of killing threads
|
@@ -40,8 +40,8 @@ def epoll_once
|
|
40
40
|
@wr_queue = [] # may contain String, ResponsePipe, and StreamFile objects
|
41
41
|
post_init
|
42
42
|
EP.set(self, IN) # wake up the main thread
|
43
|
-
|
44
|
-
|
43
|
+
rescue => e
|
44
|
+
Rainbows::Error.write(self, e)
|
45
45
|
end
|
46
46
|
|
47
47
|
def on_close
|
@@ -95,8 +95,8 @@ def close
|
|
95
95
|
|
96
96
|
def handle_error(e)
|
97
97
|
super
|
98
|
-
|
99
|
-
|
98
|
+
ensure
|
99
|
+
closed? or close
|
100
100
|
end
|
101
101
|
|
102
102
|
def queue!
|
@@ -114,8 +114,8 @@ def epoll_run(buf)
|
|
114
114
|
else
|
115
115
|
return close
|
116
116
|
end while true
|
117
|
-
|
118
|
-
|
117
|
+
rescue => e
|
118
|
+
handle_error(e)
|
119
119
|
end
|
120
120
|
|
121
121
|
def run
|
@@ -84,8 +84,8 @@ def close
|
|
84
84
|
|
85
85
|
def handle_error(e)
|
86
86
|
super
|
87
|
-
|
88
|
-
|
87
|
+
ensure
|
88
|
+
closed? or close
|
89
89
|
end
|
90
90
|
|
91
91
|
def epoll_run(buf)
|
@@ -98,8 +98,8 @@ def epoll_run(buf)
|
|
98
98
|
else
|
99
99
|
return close
|
100
100
|
end while true
|
101
|
-
|
102
|
-
|
101
|
+
rescue => e
|
102
|
+
handle_error(e)
|
103
103
|
end
|
104
104
|
|
105
105
|
def spawn(env, hp)
|
data/rainbows.gemspec
CHANGED
@@ -1,22 +1,21 @@
|
|
1
1
|
# -*- encoding: binary -*-
|
2
|
-
|
3
|
-
|
4
|
-
require 'olddoc'
|
5
|
-
extend Olddoc::Gemspec
|
6
|
-
name, summary, title = readme_metadata
|
2
|
+
manifest = File.exist?('.manifest') ?
|
3
|
+
IO.readlines('.manifest').map!(&:chomp!) : `git ls-files`.split("\n")
|
7
4
|
|
8
5
|
Gem::Specification.new do |s|
|
9
6
|
s.name = %q{rainbows}
|
10
|
-
s.version = ENV["VERSION"].dup
|
7
|
+
s.version = (ENV["VERSION"] || '5.1.1').dup
|
11
8
|
|
12
|
-
s.authors = [
|
13
|
-
s.description =
|
9
|
+
s.authors = ['Rainbows! hackers']
|
10
|
+
s.description = File.read('README').split("\n\n")[1]
|
14
11
|
s.email = %q{rainbows-public@bogomips.org}
|
15
12
|
s.executables = %w(rainbows)
|
16
|
-
s.extra_rdoc_files =
|
13
|
+
s.extra_rdoc_files = IO.readlines('.document').map!(&:chomp!).keep_if do |f|
|
14
|
+
File.exist?(f)
|
15
|
+
end
|
17
16
|
s.files = manifest
|
18
|
-
s.homepage =
|
19
|
-
s.summary =
|
17
|
+
s.homepage = 'https://bogomips.org/rainbows/'
|
18
|
+
s.summary = 'Rack app server for sleepy apps and slow clients'
|
20
19
|
|
21
20
|
# we want a newer Rack for a valid HeaderHash#each
|
22
21
|
s.add_dependency(%q<rack>, ['>= 1.1', '< 3.0'])
|
@@ -29,7 +28,6 @@
|
|
29
28
|
s.add_dependency(%q<unicorn>, ["~> 5.1"])
|
30
29
|
|
31
30
|
s.add_development_dependency(%q<isolate>, "~> 3.1")
|
32
|
-
s.add_development_dependency(%q<olddoc>, "~> 1.2")
|
33
31
|
|
34
32
|
# optional runtime dependencies depending on configuration
|
35
33
|
# see t/test_isolate.rb for the exact versions we've tested with
|
@@ -58,5 +56,14 @@
|
|
58
56
|
# We cannot automatically switch licenses when Ruby changes their license,
|
59
57
|
# so we remain optionally-licensed under the terms of Ruby 1.8 despite
|
60
58
|
# not having a good way to specify this in an SPDX-compatible way...
|
61
|
-
|
59
|
+
ruby_1_8 = 'Nonstandard'
|
60
|
+
s.licenses = [ 'GPL-2.0+', ruby_1_8 ]
|
61
|
+
s.metadata = {
|
62
|
+
'bug_tracker_uri' => 'https://bogomips.org/rainbows/#label-Contact',
|
63
|
+
'changelog_uri' => 'https://bogomips.org/rainbows/NEWS.html',
|
64
|
+
'documentation_uri' => 'https://bogomips.org/rainbows/',
|
65
|
+
'homepage_uri' => 'https://bogomips.org/rainbows/',
|
66
|
+
'mailing_list_uri' => 'https://bogomips.org/rainbows-public/',
|
67
|
+
'source_code_uri' => 'https://bogomips.org/rainbows.git',
|
68
|
+
}
|
62
69
|
end
|
data/t/bin/unused_listen
CHANGED
@@ -31,7 +31,7 @@ begin
|
|
31
31
|
# when running tests in parallel with gmake. Create a lock file while
|
32
32
|
# we have the port here to ensure that does not happen.
|
33
33
|
lock_path = "#{Dir::tmpdir}/unicorn_test.#{addr}:#{port}.lock"
|
34
|
-
|
34
|
+
File.open(lock_path, File::WRONLY|File::CREAT|File::EXCL, 0600)
|
35
35
|
rescue Errno::EEXIST
|
36
36
|
sock.close rescue nil
|
37
37
|
retry
|
data/t/hijack.ru
CHANGED
data/t/sha1-random-size.ru
CHANGED
data/t/test_isolate.rb
CHANGED
@@ -16,11 +16,11 @@
|
|
16
16
|
lock = File.open(__FILE__, "rb")
|
17
17
|
lock.flock(File::LOCK_EX)
|
18
18
|
Isolate.now!(opts) do
|
19
|
-
gem 'kgio', '2.11.
|
20
|
-
gem 'rack', '2.0.
|
19
|
+
gem 'kgio', '2.11.2'
|
20
|
+
gem 'rack', '2.0.6'
|
21
21
|
gem 'kcar', '0.6.0'
|
22
|
-
gem 'raindrops', '0.
|
23
|
-
gem 'unicorn', '5.
|
22
|
+
gem 'raindrops', '0.19.0'
|
23
|
+
gem 'unicorn', '5.4.1'
|
24
24
|
|
25
25
|
if engine == "ruby"
|
26
26
|
gem 'sendfile', '1.2.2'
|
@@ -43,7 +43,7 @@
|
|
43
43
|
end
|
44
44
|
|
45
45
|
if RUBY_PLATFORM =~ /linux/
|
46
|
-
gem 'sleepy_penguin', '3.
|
46
|
+
gem 'sleepy_penguin', '3.5.1'
|
47
47
|
|
48
48
|
# is 2.6.32 new enough?
|
49
49
|
gem 'io_splice', '4.4.0' if `uname -r`.strip > '2.6.32'
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: rainbows
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 5.
|
4
|
+
version: 5.2.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Rainbows! hackers
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date:
|
11
|
+
date: 2019-01-05 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: rack
|
@@ -72,20 +72,6 @@ dependencies:
|
|
72
72
|
- - "~>"
|
73
73
|
- !ruby/object:Gem::Version
|
74
74
|
version: '3.1'
|
75
|
-
- !ruby/object:Gem::Dependency
|
76
|
-
name: olddoc
|
77
|
-
requirement: !ruby/object:Gem::Requirement
|
78
|
-
requirements:
|
79
|
-
- - "~>"
|
80
|
-
- !ruby/object:Gem::Version
|
81
|
-
version: '1.2'
|
82
|
-
type: :development
|
83
|
-
prerelease: false
|
84
|
-
version_requirements: !ruby/object:Gem::Requirement
|
85
|
-
requirements:
|
86
|
-
- - "~>"
|
87
|
-
- !ruby/object:Gem::Version
|
88
|
-
version: '1.2'
|
89
75
|
description: |-
|
90
76
|
\Rainbows! is an HTTP server for sleepy Rack applications. It is based on
|
91
77
|
unicorn, but designed to handle applications that expect long
|
@@ -436,7 +422,13 @@ homepage: https://bogomips.org/rainbows/
|
|
436
422
|
licenses:
|
437
423
|
- GPL-2.0+
|
438
424
|
- Nonstandard
|
439
|
-
metadata:
|
425
|
+
metadata:
|
426
|
+
bug_tracker_uri: https://bogomips.org/rainbows/#label-Contact
|
427
|
+
changelog_uri: https://bogomips.org/rainbows/NEWS.html
|
428
|
+
documentation_uri: https://bogomips.org/rainbows/
|
429
|
+
homepage_uri: https://bogomips.org/rainbows/
|
430
|
+
mailing_list_uri: https://bogomips.org/rainbows-public/
|
431
|
+
source_code_uri: https://bogomips.org/rainbows.git
|
440
432
|
post_install_message:
|
441
433
|
rdoc_options: []
|
442
434
|
require_paths:
|
@@ -452,9 +444,8 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
452
444
|
- !ruby/object:Gem::Version
|
453
445
|
version: '0'
|
454
446
|
requirements: []
|
455
|
-
|
456
|
-
rubygems_version: 2.6.10
|
447
|
+
rubygems_version: 3.0.1
|
457
448
|
signing_key:
|
458
449
|
specification_version: 4
|
459
|
-
summary:
|
450
|
+
summary: Rack app server for sleepy apps and slow clients
|
460
451
|
test_files: []
|