rainbows 0.1.0 → 0.1.1

Sign up to get free protection for your applications and to get access to all the features.
data/GIT-VERSION-GEN CHANGED
@@ -1,8 +1,7 @@
1
1
  #!/bin/sh
2
2
 
3
3
  GVF=GIT-VERSION-FILE
4
- DEF_VER=v0.1.0
5
- # DEF_VER=v0.1.0.GIT
4
+ DEF_VER=v0.1.1.GIT
6
5
 
7
6
  LF='
8
7
  '
data/GNUmakefile CHANGED
@@ -153,4 +153,8 @@ gem install-gem: GIT-VERSION-FILE
153
153
  $(MAKE) $@ VERSION=$(GIT_VERSION)
154
154
  endif
155
155
 
156
- .PHONY: .FORCE-GIT-VERSION-FILE doc manifest man
156
+ all:: test
157
+ test:
158
+ $(MAKE) -C t
159
+
160
+ .PHONY: .FORCE-GIT-VERSION-FILE doc manifest man test
data/LICENSE CHANGED
@@ -1,5 +1,5 @@
1
- \Rainbows! is copyrighted free software by Eric Wong
2
- (mailto:normalperson@yhbt.net) and contributors. You can redistribute it
1
+ \Rainbows! is copyrighted Free Software by all contributors, see the
2
+ logs in revision control for all of them. You can redistribute it
3
3
  and/or modify it under either the terms of the
4
4
  {GPL2}[http://www.gnu.org/licenses/gpl-2.0.txt] (see link:COPYING) or
5
5
  the conditions below:
data/README CHANGED
@@ -1,11 +1,10 @@
1
- = Rainbows! Unicorn for slow apps and slow clients
1
+ = Rainbows! Unicorn for sleepy apps and slow clients
2
2
 
3
- \Rainbows! is a HTTP server for {Rack}[http://rack.rubyforge.org/]
4
- applications. It is based on {Unicorn}[http://unicorn.bogomips.org/],
5
- but designed to handle applications that expect long request/response
6
- times and/or slow clients. For Rack applications not heavily bound by
7
- slow external dependencies, consider Unicorn instead as it simpler and
8
- easier to debug.
3
+ Rainbows! is a HTTP server for sleepy Rack applications. It is based on
4
+ Unicorn, but designed to handle applications that expect long
5
+ request/response times and/or slow clients. For Rack applications not
6
+ heavily bound by slow external network dependencies, consider Unicorn
7
+ instead as it simpler and easier to debug.
9
8
 
10
9
  == \Rainbows! is about Diversity
11
10
 
@@ -24,9 +23,11 @@ CPU/memory/disk concurrency.
24
23
 
25
24
  == Features
26
25
 
27
- * Designed for Rack, the standard for modern Ruby HTTP applications.
26
+ * Designed for {Rack}[http://rack.rubyforge.org/], the standard for
27
+ modern Ruby HTTP applications.
28
28
 
29
- * Built on Unicorn, inheriting its process/socket management features
29
+ * Built on {Unicorn}[http://unicorn.bogomips.org/], inheriting its
30
+ process/socket management features
30
31
  such as transparent upgrades and Ruby configuration DSL.
31
32
 
32
33
  * As with Unicorn, it is able to stream large request bodies off the
@@ -55,8 +56,8 @@ CPU/memory/disk concurrency.
55
56
 
56
57
  == License
57
58
 
58
- \Rainbows! is copyright 2009 Eric Wong and contributors. It is based on
59
- Mongrel and Unicorn and carries the same license.
59
+ \Rainbows! is copyright 2009 by all contributors (see logs in git).
60
+ It is based on Mongrel and Unicorn and carries the same license.
60
61
 
61
62
  Mongrel is copyright 2007 Zed A. Shaw and contributors. It is licensed
62
63
  under the Ruby license and the GPL2. See the included LICENSE file for
@@ -64,6 +65,17 @@ details.
64
65
 
65
66
  \Rainbows! is 100% Free Software.
66
67
 
68
+ == Install
69
+
70
+ You may download the tarball from the Rainbows project page on Rubyforge
71
+ and run setup.rb after unpacking it:
72
+
73
+ http://rubyforge.org/frs/?group_id=8977
74
+
75
+ You may also install it via Rubygems on Rubyforge:
76
+
77
+ gem install rainbows
78
+
67
79
  == Usage
68
80
 
69
81
  === for Rack applications
data/Rakefile CHANGED
@@ -33,7 +33,7 @@ task :news_atom do
33
33
  feed :xmlns => "http://www.w3.org/2005/Atom" do
34
34
  id! "http://rainbows.rubyforge.org/NEWS.atom.xml"
35
35
  title "Rainbows! news"
36
- subtitle "Unicorn for slow apps and slow clients"
36
+ subtitle "Unicorn for sleepy apps and slow clients"
37
37
  link! :rel => 'alternate', :type => 'text/html',
38
38
  :href => 'http://rainbows.rubyforge.org/NEWS.html'
39
39
  updated(new_tags.empty? ? "1970-01-01T00:00:00Z" : new_tags.first[:time])
@@ -64,7 +64,7 @@ task :news_rdoc do
64
64
  puts ""
65
65
 
66
66
  body = tag[:body]
67
- puts tag[:body].gsub(/^/sm, " ").gsub!(/[ \t]+$/sm, "")
67
+ puts tag[:body].gsub(/^/sm, " ").gsub(/[ \t]+$/sm, "")
68
68
  puts ""
69
69
  end
70
70
  end
@@ -101,3 +101,19 @@ task :release_notes do
101
101
  print "\nChanges:\n\n"
102
102
  puts body
103
103
  end
104
+
105
+ desc "read news article from STDIN and post to rubyforge"
106
+ task :publish_news do
107
+ require 'rubyforge'
108
+ IO.select([STDIN], nil, nil, 1) or abort "E: news must be read from stdin"
109
+ msg = STDIN.readlines
110
+ subject = msg.shift
111
+ blank = msg.shift
112
+ blank == "\n" or abort "no newline after subject!"
113
+ subject.strip!
114
+ body = msg.join("").strip!
115
+
116
+ rf = RubyForge.new.configure
117
+ rf.login
118
+ rf.post_news('rainbows', subject, body)
119
+ end
data/lib/rainbows/base.rb CHANGED
@@ -24,7 +24,8 @@ module Rainbows
24
24
  env = {}
25
25
  remote_addr = TCPSocket === client ? client.peeraddr.last : LOCALHOST
26
26
 
27
- begin
27
+ begin # loop
28
+ Thread.current[:t] = Time.now
28
29
  while ! hp.headers(env, buf)
29
30
  buf << client.readpartial(CHUNK_SIZE)
30
31
  end
@@ -60,9 +61,7 @@ module Rainbows
60
61
  end
61
62
 
62
63
  def self.included(klass)
63
- HttpServer.constants.each do |x|
64
- klass.const_set(x, HttpServer.const_get(x))
65
- end
64
+ klass.const_set :LISTENERS, HttpServer::LISTENERS
66
65
  end
67
66
 
68
67
  end
@@ -3,7 +3,7 @@
3
3
  module Rainbows
4
4
 
5
5
  module Const
6
- RAINBOWS_VERSION = '0.1.0'
6
+ RAINBOWS_VERSION = '0.1.1'
7
7
 
8
8
  include Unicorn::Const
9
9
 
@@ -26,11 +26,11 @@ module Rainbows
26
26
 
27
27
  # closing anything we IO.select on will raise EBADF
28
28
  trap(:USR1) { reopen_worker_logs(worker.nr) rescue nil }
29
- trap(:QUIT) { alive = false; LISTENERS.map! { |s| s.close rescue nil } }
29
+ trap(:QUIT) { LISTENERS.map! { |s| s.close rescue nil } }
30
30
  [:TERM, :INT].each { |sig| trap(sig) { exit(0) } } # instant shutdown
31
31
  logger.info "worker=#{worker.nr} ready with ThreadPool"
32
32
 
33
- while alive && master_pid == Process.ppid
33
+ while LISTENERS.first && master_pid == Process.ppid
34
34
  maintain_thread_count(threads)
35
35
  threads.list.each do |thr|
36
36
  alive.chmod(nr += 1)
@@ -65,11 +65,9 @@ module Rainbows
65
65
 
66
66
  def new_worker_thread
67
67
  Thread.new {
68
- alive = true
69
- thr = Thread.current
70
68
  begin
71
69
  ret = begin
72
- thr[:t] = Time.now
70
+ Thread.current[:t] = Time.now
73
71
  IO.select(LISTENERS, nil, nil, timeout/2.0) or next
74
72
  rescue Errno::EINTR
75
73
  retry
@@ -79,16 +77,15 @@ module Rainbows
79
77
  ret.first.each do |sock|
80
78
  begin
81
79
  process_client(sock.accept_nonblock)
82
- thr[:t] = Time.now
83
80
  rescue Errno::EAGAIN, Errno::ECONNABORTED
84
81
  end
85
82
  end
86
83
  rescue Object => e
87
- if alive
84
+ if LISTENERS.first
88
85
  logger.error "Unhandled listen loop exception #{e.inspect}."
89
86
  logger.error e.backtrace.join("\n")
90
87
  end
91
- end while alive = LISTENERS.first
88
+ end while LISTENERS.first
92
89
  }
93
90
  end
94
91
 
@@ -22,12 +22,13 @@ module Rainbows
22
22
 
23
23
  # closing anything we IO.select on will raise EBADF
24
24
  trap(:USR1) { reopen_worker_logs(worker.nr) rescue nil }
25
- trap(:QUIT) { alive = false; LISTENERS.map! { |s| s.close rescue nil } }
25
+ trap(:QUIT) { LISTENERS.map! { |s| s.close rescue nil } }
26
26
  [:TERM, :INT].each { |sig| trap(sig) { exit(0) } } # instant shutdown
27
27
  logger.info "worker=#{worker.nr} ready with ThreadSpawn"
28
28
 
29
29
  while alive && master_pid == Process.ppid
30
30
  ret = begin
31
+ alive.chmod(nr += 1)
31
32
  IO.select(LISTENERS, nil, nil, timeout/2.0) or next
32
33
  rescue Errno::EINTR
33
34
  retry
@@ -44,10 +45,7 @@ module Rainbows
44
45
  rescue Errno::EINTR, Errno::ECONNABORTED
45
46
  next
46
47
  end
47
- threads.add(Thread.new(c) { |c|
48
- Thread.current[:t] = Time.now
49
- process_client(c)
50
- })
48
+ threads.add(Thread.new(c) { |c| process_client(c) })
51
49
  end
52
50
  end
53
51
  join_spawned_threads(threads)
data/local.mk.sample CHANGED
@@ -5,17 +5,24 @@
5
5
  # This is depends on a bunch of GNU-isms from bash, sed, touch.
6
6
 
7
7
  DLEXT := so
8
- rack_ver := 1.0.0
8
+ gems := rev-0.3.0 rack-1.0.0 iobuffer-0.1.1
9
9
 
10
10
  # Avoid loading rubygems to speed up tests because gmake is
11
11
  # fork+exec heavy with Ruby.
12
12
  ifeq ($(r19),)
13
13
  ruby := $(HOME)/bin/ruby
14
- RUBYLIB := $(HOME)/lib/ruby/gems/1.8/gems/rack-$(rack_ver)/lib
14
+ gem_paths := $(addprefix $(HOME)/lib/ruby/gems/1.8/gems/,$(gems))
15
15
  else
16
16
  export PATH := $(HOME)/ruby-1.9/bin:$(PATH)
17
17
  ruby := $(HOME)/ruby-1.9/bin/ruby --disable-gems
18
- RUBYLIB := $(HOME)/ruby-1.9/lib/ruby/gems/1.9.1/gems/rack-$(rack_ver)/lib
18
+ gems := $(gems) case-0.5 revactor-0.1.4
19
+ gem_paths := $(addprefix $(HOME)/ruby-1.9/lib/ruby/gems/1.9.1/gems/,$(gems))
20
+ endif
21
+
22
+ ifdef gem_paths
23
+ sp :=
24
+ sp +=
25
+ RUBYLIB := $(subst $(sp),:,$(addsuffix /lib,$(gem_paths)))
19
26
  endif
20
27
 
21
28
  # pipefail is THE reason to use bash (v3+)
@@ -23,9 +30,9 @@ SHELL := /bin/bash -e -o pipefail
23
30
 
24
31
  full-test: test-18 test-19
25
32
  test-18:
26
- $(MAKE) test test-rails 2>&1 | sed -u -e 's!^!1.8 !'
33
+ $(MAKE) test 2>&1 | sed -u -e 's!^!1.8 !'
27
34
  test-19:
28
- $(MAKE) test test-rails r19=1 2>&1 | sed -u -e 's!^!1.9 !'
35
+ $(MAKE) test r19=t 2>&1 | sed -u -e 's!^!1.9 !'
29
36
 
30
37
  latest: NEWS
31
38
  @awk 'BEGIN{RS="=== ";ORS=""}NR==2{sub(/\n$$/,"");print RS""$$0 }' < $<
data/rainbows.gemspec CHANGED
@@ -14,7 +14,7 @@ Gem::Specification.new do |s|
14
14
  s.name = %q{rainbows}
15
15
  s.version = ENV["VERSION"]
16
16
 
17
- s.authors = ["Eric Wong"]
17
+ s.authors = ["Rainbows! developers"]
18
18
  s.date = Time.now.utc.strftime('%Y-%m-%d')
19
19
  s.description = File.read("README").split(/\n\n/)[1]
20
20
  s.email = %q{rainbows-talk@rubyforge.org}
@@ -33,7 +33,7 @@ Gem::Specification.new do |s|
33
33
 
34
34
  s.files = manifest
35
35
  s.homepage = %q{http://rainbows.rubyforge.org/}
36
- s.summary = %q{Unicorn for slow apps and slow clients}
36
+ s.summary = %q{Unicorn for sleepy apps and slow clients}
37
37
  s.rdoc_options = [ "-Na", "-t", "Rainbows! #{s.summary}" ]
38
38
  s.require_paths = %w(lib)
39
39
  s.rubyforge_project = %q{rainbows}
data/t/GNUmakefile CHANGED
@@ -37,6 +37,9 @@ ifndef V
37
37
  quiet_post = > $(t_log) 2>&1; exit $$(cat $(t_code))
38
38
  pfx =
39
39
  else
40
+ ifeq ($(V),2)
41
+ TEST_OPTS += -x
42
+ endif
40
43
  quiet_pre = @echo '* $@';
41
44
  quiet_post = 2>&1 | tee $(t_log); exit $$(cat $(t_code))
42
45
  pfx = $@
@@ -50,7 +53,7 @@ test-bin-$(RUBY_VERSION)/rainbows: ../bin/rainbows
50
53
  mkdir -p $(@D)
51
54
  install -m 755 $^ $@+
52
55
  $(ruby) -i -p -e '$$_.gsub!(%r{^#!.*$$},"#!$(ruby_bin)")' $@+
53
- cmp $@+ $@ || mv $@+ $@
56
+ cmp $@+ $@ 2>/dev/null || mv $@+ $@
54
57
  $(RM) $@+
55
58
 
56
59
  $(T): export ruby := $(ruby)
data/t/t0000-basic.sh CHANGED
@@ -2,17 +2,10 @@
2
2
  . ./test-lib.sh
3
3
 
4
4
  eval $(unused_listen)
5
- config_ru=$(mktemp -t rainbows.$$.XXXXXXXX.config.ru)
6
- pid=$(mktemp -t rainbows.$$.XXXXXXXX.pid)
7
- TEST_RM_LIST="$TEST_RM_LIST $config_ru $lock_path"
5
+ pid=$(mktemp -t rainbows.$$.pid.XXXXXXXX)
6
+ TEST_RM_LIST="$TEST_RM_LIST $lock_path $pid"
8
7
 
9
- cat > $config_ru <<\EOF
10
- use Rack::ContentLength
11
- use Rack::ContentType
12
- run lambda { |env| [ 200, {}, [ env.inspect << "\n" ] ] }
13
- EOF
14
-
15
- rainbows $config_ru -l $listen --pid $pid &
8
+ rainbows t0000.ru -l $listen --pid $pid &
16
9
  wait_for_pid $pid
17
10
  curl -sSfv http://$listen/
18
11
  kill $(cat $pid)
data/t/t0000.ru ADDED
@@ -0,0 +1,3 @@
1
+ use Rack::ContentLength
2
+ use Rack::ContentType
3
+ run lambda { |env| [ 200, {}, [ env.inspect << "\n" ] ] }
@@ -2,23 +2,13 @@
2
2
  . ./test-lib.sh
3
3
 
4
4
  eval $(unused_listen)
5
- config_ru=$(mktemp -t rainbows.$$.XXXXXXXX.config.ru)
6
- unicorn_config=$(mktemp -t rainbows.$$.XXXXXXXX.unicorn.rb)
7
- curl_out=$(mktemp -t rainbows.$$.XXXXXXXX.curl.out)
8
- curl_err=$(mktemp -t rainbows.$$.XXXXXXXX.curl.err)
9
- pid=$(mktemp -t rainbows.$$.XXXXXXXX.pid)
10
- TEST_RM_LIST="$TEST_RM_LIST $config_ru $unicorn_config $lock_path"
5
+ unicorn_config=$(mktemp -t rainbows.$$.unicorn.rb.XXXXXXXX)
6
+ curl_out=$(mktemp -t rainbows.$$.curl.out.XXXXXXXX)
7
+ curl_err=$(mktemp -t rainbows.$$.curl.err.XXXXXXXX)
8
+ pid=$(mktemp -t rainbows.$$.pid.XXXXXXXX)
9
+ TEST_RM_LIST="$TEST_RM_LIST $unicorn_config $lock_path $pid"
11
10
  TEST_RM_LIST="$TEST_RM_LIST $curl_out $curl_err"
12
11
 
13
- cat > $config_ru <<\EOF
14
- use Rack::ContentLength
15
- use Rack::ContentType
16
- run lambda { |env|
17
- sleep 1
18
- [ 200, {}, [ Thread.current.inspect << "\n" ] ]
19
- }
20
- EOF
21
-
22
12
  nr_client=30
23
13
  nr_thread=10
24
14
 
@@ -31,7 +21,7 @@ Rainbows! do
31
21
  end
32
22
  EOF
33
23
 
34
- rainbows -D $config_ru -c $unicorn_config
24
+ rainbows -D t1000.ru -c $unicorn_config
35
25
  wait_for_pid $pid
36
26
 
37
27
  start=$(date +%s)
data/t/t1000.ru ADDED
@@ -0,0 +1,6 @@
1
+ use Rack::ContentLength
2
+ use Rack::ContentType
3
+ run lambda { |env|
4
+ sleep 1
5
+ [ 200, {}, [ Thread.current.inspect << "\n" ] ]
6
+ }
@@ -2,23 +2,13 @@
2
2
  . ./test-lib.sh
3
3
 
4
4
  eval $(unused_listen)
5
- config_ru=$(mktemp -t rainbows.$$.XXXXXXXX.config.ru)
6
- unicorn_config=$(mktemp -t rainbows.$$.XXXXXXXX.unicorn.rb)
7
- curl_out=$(mktemp -t rainbows.$$.XXXXXXXX.curl.out)
8
- curl_err=$(mktemp -t rainbows.$$.XXXXXXXX.curl.err)
9
- pid=$(mktemp -t rainbows.$$.XXXXXXXX.pid)
10
- TEST_RM_LIST="$TEST_RM_LIST $config_ru $unicorn_config $lock_path"
5
+ unicorn_config=$(mktemp -t rainbows.$$.unicorn.rb.XXXXXXXX)
6
+ curl_out=$(mktemp -t rainbows.$$.curl.out.XXXXXXXX)
7
+ curl_err=$(mktemp -t rainbows.$$.curl.err.XXXXXXXX)
8
+ pid=$(mktemp -t rainbows.$$.pid.XXXXXXXX)
9
+ TEST_RM_LIST="$TEST_RM_LIST $unicorn_config $lock_path $pid"
11
10
  TEST_RM_LIST="$TEST_RM_LIST $curl_out $curl_err"
12
11
 
13
- cat > $config_ru <<\EOF
14
- use Rack::ContentLength
15
- use Rack::ContentType
16
- run lambda { |env|
17
- sleep 1
18
- [ 200, {}, [ Thread.current.inspect << "\n" ] ]
19
- }
20
- EOF
21
-
22
12
  nr_client=30
23
13
  nr_thread=10
24
14
 
@@ -31,7 +21,7 @@ Rainbows! do
31
21
  end
32
22
  EOF
33
23
 
34
- rainbows -D $config_ru -c $unicorn_config
24
+ rainbows -D t2000.ru -c $unicorn_config
35
25
  wait_for_pid $pid
36
26
 
37
27
  start=$(date +%s)
data/t/t2000.ru ADDED
@@ -0,0 +1,6 @@
1
+ use Rack::ContentLength
2
+ use Rack::ContentType
3
+ run lambda { |env|
4
+ sleep 1
5
+ [ 200, {}, [ Thread.current.inspect << "\n" ] ]
6
+ }
@@ -3,23 +3,13 @@
3
3
  require_revactor
4
4
 
5
5
  eval $(unused_listen)
6
- config_ru=$(mktemp -t rainbows.$$.XXXXXXXX.config.ru)
7
- unicorn_config=$(mktemp -t rainbows.$$.XXXXXXXX.unicorn.rb)
8
- curl_out=$(mktemp -t rainbows.$$.XXXXXXXX.curl.out)
9
- curl_err=$(mktemp -t rainbows.$$.XXXXXXXX.curl.err)
10
- pid=$(mktemp -t rainbows.$$.XXXXXXXX.pid)
11
- TEST_RM_LIST="$TEST_RM_LIST $config_ru $unicorn_config $lock_path"
6
+ unicorn_config=$(mktemp -t rainbows.$$.unicorn.rb.XXXXXXXX)
7
+ curl_out=$(mktemp -t rainbows.$$.curl.out.XXXXXXXX)
8
+ curl_err=$(mktemp -t rainbows.$$.curl.err.XXXXXXXX)
9
+ pid=$(mktemp -t rainbows.$$.pid.XXXXXXXX)
10
+ TEST_RM_LIST="$TEST_RM_LIST $pid $unicorn_config $lock_path"
12
11
  TEST_RM_LIST="$TEST_RM_LIST $curl_out $curl_err"
13
12
 
14
- cat > $config_ru <<\EOF
15
- use Rack::ContentLength
16
- use Rack::ContentType
17
- run lambda { |env|
18
- Actor.sleep 1
19
- [ 200, {}, [ Thread.current.inspect << "\n" ] ]
20
- }
21
- EOF
22
-
23
13
  nr_client=30
24
14
  nr_actor=10
25
15
 
@@ -32,7 +22,7 @@ Rainbows! do
32
22
  end
33
23
  EOF
34
24
 
35
- rainbows -D $config_ru -c $unicorn_config
25
+ rainbows -D t3000.ru -c $unicorn_config
36
26
  wait_for_pid $pid
37
27
 
38
28
  start=$(date +%s)
data/t/t3000.ru ADDED
@@ -0,0 +1,6 @@
1
+ use Rack::ContentLength
2
+ use Rack::ContentType
3
+ run lambda { |env|
4
+ Actor.sleep 1
5
+ [ 200, {}, [ Thread.current.inspect << "\n" ] ]
6
+ }
@@ -14,7 +14,7 @@ r_out=$(mktemp -t rainbows.$$.r.out.XXXXXXXX)
14
14
  pid=$(mktemp -t rainbows.$$.pid.XXXXXXXX)
15
15
  blob=$(mktemp -t rainbows.$$.blob.XXXXXXXX)
16
16
  TEST_RM_LIST="$TEST_RM_LIST $unicorn_config $lock_path $r_err $r_out"
17
- TEST_RM_LIST="$TEST_RM_LIST $curl_out $curl_err $blob"
17
+ TEST_RM_LIST="$TEST_RM_LIST $curl_out $curl_err $blob $pid"
18
18
 
19
19
  cat > $unicorn_config <<EOF
20
20
  listen "$listen"
data/t/test-lib.sh CHANGED
@@ -1,5 +1,5 @@
1
1
  #!/bin/sh
2
- # Copyright (c) 2009 Eric Wong
2
+ # Copyright (c) 2009 Rainbows! developers
3
3
  set -e
4
4
  set -u
5
5
  T=$(basename $0)
metadata CHANGED
@@ -1,15 +1,15 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: rainbows
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.1.0
4
+ version: 0.1.1
5
5
  platform: ruby
6
6
  authors:
7
- - Eric Wong
7
+ - Rainbows! developers
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
11
 
12
- date: 2009-10-05 00:00:00 -07:00
12
+ date: 2009-10-06 00:00:00 -07:00
13
13
  default_executable:
14
14
  dependencies:
15
15
  - !ruby/object:Gem::Dependency
@@ -32,7 +32,12 @@ dependencies:
32
32
  - !ruby/object:Gem::Version
33
33
  version: 0.93.1
34
34
  version:
35
- description: \Rainbows! is a HTTP server for {Rack}[http://rack.rubyforge.org/] applications. It is based on {Unicorn}[http://unicorn.bogomips.org/], but designed to handle applications that expect long request/response times and/or slow clients. For Rack applications not heavily bound by slow external dependencies, consider Unicorn instead as it simpler and easier to debug.
35
+ description: |-
36
+ Rainbows! is a HTTP server for sleepy Rack applications. It is based on
37
+ Unicorn, but designed to handle applications that expect long
38
+ request/response times and/or slow clients. For Rack applications not
39
+ heavily bound by slow external network dependencies, consider Unicorn
40
+ instead as it simpler and easier to debug.
36
41
  email: rainbows-talk@rubyforge.org
37
42
  executables:
38
43
  - rainbows
@@ -97,19 +102,25 @@ files:
97
102
  - t/bin/unused_listen
98
103
  - t/sha1.ru
99
104
  - t/t0000-basic.sh
105
+ - t/t0000.ru
100
106
  - t/t1000-thread-pool-basic.sh
107
+ - t/t1000.ru
101
108
  - t/t2000-thread-spawn-basic.sh
109
+ - t/t2000.ru
102
110
  - t/t3000-revactor-basic.sh
111
+ - t/t3000.ru
103
112
  - t/t3100-revactor-tee-input.sh
104
113
  - t/test-lib.sh
105
114
  - vs_Unicorn
106
- has_rdoc: false
115
+ has_rdoc: true
107
116
  homepage: http://rainbows.rubyforge.org/
117
+ licenses: []
118
+
108
119
  post_install_message:
109
120
  rdoc_options:
110
121
  - -Na
111
122
  - -t
112
- - Rainbows! Unicorn for slow apps and slow clients
123
+ - Rainbows! Unicorn for sleepy apps and slow clients
113
124
  require_paths:
114
125
  - lib
115
126
  required_ruby_version: !ruby/object:Gem::Requirement
@@ -127,9 +138,9 @@ required_rubygems_version: !ruby/object:Gem::Requirement
127
138
  requirements: []
128
139
 
129
140
  rubyforge_project: rainbows
130
- rubygems_version: 1.3.1
141
+ rubygems_version: 1.3.5
131
142
  signing_key:
132
- specification_version: 2
133
- summary: Unicorn for slow apps and slow clients
143
+ specification_version: 3
144
+ summary: Unicorn for sleepy apps and slow clients
134
145
  test_files: []
135
146