rainbows 0.90.1 → 0.90.2

Sign up to get free protection for your applications and to get access to all the features.
@@ -53,7 +53,7 @@
53
53
  %tr.comp_row
54
54
  %td.mod RevThreadSpawn
55
55
  %td.tee No
56
- %td.r18 Slow*
56
+ %td.r18 Yes
57
57
  %td.r19 Yes
58
58
  %td.rbx No
59
59
  %td.slow Yes
@@ -88,7 +88,7 @@
88
88
  %tr.comp_row
89
89
  %td.mod RevThreadPool
90
90
  %td.tee No
91
- %td.r18 Slow*
91
+ %td.r18 Yes
92
92
  %td.r19 Yes
93
93
  %td.rbx No
94
94
  %td.slow Yes
@@ -101,8 +101,7 @@
101
101
  %td.slow Yes
102
102
  %ul
103
103
  %li
104
- RevThread* + 1.8 performance is bad with Rev <= 0.3.1.
105
- Rev 0.3.2 (when it is released) should be much faster under 1.8.
104
+ RevThread* + 1.8 requires Rev >= 0.3.2 for reasonable performance
106
105
  %li
107
106
  waiting on Rubinius for better signal handling
108
107
  %li
data/GIT-VERSION-GEN CHANGED
@@ -1,7 +1,7 @@
1
1
  #!/bin/sh
2
2
 
3
3
  GVF=GIT-VERSION-FILE
4
- DEF_VER=v0.90.1.GIT
4
+ DEF_VER=v0.90.2.GIT
5
5
 
6
6
  LF='
7
7
  '
data/Rakefile CHANGED
@@ -1,4 +1,5 @@
1
1
  # -*- encoding: binary -*-
2
+ autoload :Gem, 'rubygems'
2
3
 
3
4
  # most tasks are in the GNUmakefile which offers better parallelism
4
5
 
@@ -89,8 +90,6 @@ end
89
90
 
90
91
  desc "print release notes for Rubyforge"
91
92
  task :release_notes do
92
- require 'rubygems'
93
-
94
93
  spec = Gem::Specification.load('rainbows.gemspec')
95
94
  puts spec.description.strip
96
95
  puts ""
@@ -121,7 +120,6 @@ end
121
120
 
122
121
  desc "post to RAA"
123
122
  task :raa_update do
124
- require 'rubygems'
125
123
  require 'net/http'
126
124
  require 'net/netrc'
127
125
  rc = Net::Netrc.locate('rainbows-raa') or abort "~/.netrc not found"
data/bin/rainbows CHANGED
@@ -41,7 +41,7 @@ opts = OptionParser.new("", 24, ' ') do |opts|
41
41
  require library
42
42
  end
43
43
 
44
- opts.separator "Unicorn options:"
44
+ opts.separator "Rainbows!/Unicorn options:"
45
45
 
46
46
  # some of these switches exist for rackup command-line compatibility,
47
47
 
@@ -57,8 +57,8 @@ opts = OptionParser.new("", 24, ' ') do |opts|
57
57
  set_listener = true
58
58
  end
59
59
 
60
- opts.on("-E", "--env ENVIRONMENT",
61
- "use ENVIRONMENT for defaults (default: development)") do |e|
60
+ opts.on("-E", "--env RACK_ENV",
61
+ "use RACK_ENV for defaults (default: development)") do |e|
62
62
  ENV["RACK_ENV"] = e
63
63
  end
64
64
 
@@ -67,8 +67,8 @@ opts = OptionParser.new("", 24, ' ') do |opts|
67
67
  end
68
68
 
69
69
  opts.on("-P", "--pid FILE", "DEPRECATED") do |f|
70
- warn %q{Use of --pid/-P is strongly discouraged}
71
- warn %q{Use the 'pid' directive in the Unicorn config file instead}
70
+ warn "Use of --pid/-P is strongly discouraged"
71
+ warn "Use the 'pid' directive in the Rainbows!/Unicorn config file instead"
72
72
  options[:pid] = f
73
73
  end
74
74
 
@@ -77,7 +77,7 @@ opts = OptionParser.new("", 24, ' ') do |opts|
77
77
  warn "-s/--server only exists for compatibility with rackup"
78
78
  end
79
79
 
80
- # Unicorn-specific stuff
80
+ # Rainbows!/Unicorn-specific stuff
81
81
  opts.on("-l", "--listen {HOST:PORT|PATH}",
82
82
  "listen on HOST:PORT or PATH",
83
83
  "this may be specified multiple times",
@@ -85,7 +85,8 @@ opts = OptionParser.new("", 24, ' ') do |opts|
85
85
  listeners << address
86
86
  end
87
87
 
88
- opts.on("-c", "--config-file FILE", "Unicorn-specific config file") do |f|
88
+ opts.on("-c", "--config-file FILE",
89
+ "Rainbows!/Unicorn-specific config file") do |f|
89
90
  options[:config_file] = f
90
91
  end
91
92
 
@@ -102,7 +103,7 @@ opts = OptionParser.new("", 24, ' ') do |opts|
102
103
  end
103
104
 
104
105
  opts.on_tail("-v", "--version", "Show version") do
105
- puts "unicorn v#{Unicorn::Const::UNICORN_VERSION}"
106
+ puts "Rainbows! v#{Rainbows::Const::RAINBOWS_VERSION}"
106
107
  exit
107
108
  end
108
109
 
@@ -3,7 +3,7 @@
3
3
  module Rainbows
4
4
 
5
5
  module Const
6
- RAINBOWS_VERSION = '0.90.1'
6
+ RAINBOWS_VERSION = '0.90.2'
7
7
 
8
8
  include Unicorn::Const
9
9
 
@@ -16,7 +16,8 @@ module Rainbows
16
16
  next if %r{\AX-Rainbows-}i =~ key
17
17
  next if SKIP.include?(key.downcase)
18
18
  if value =~ /\n/
19
- out.concat(value.split(/\n/).map! { |v| "#{key}: #{v}\r\n" })
19
+ # avoiding blank, key-only cookies with /\n+/
20
+ out.concat(value.split(/\n+/).map! { |v| "#{key}: #{v}\r\n" })
20
21
  else
21
22
  out << "#{key}: #{value}\r\n"
22
23
  end
@@ -15,9 +15,8 @@ module Rainbows
15
15
  # slow clients and applications with medium-to-slow response times
16
16
  # (I/O bound), but less suitable for sleepy applications.
17
17
  #
18
- # WARNING: this model does not currently perform well under 1.8 with
19
- # Rev 0.3.1. Rev 0.3.2 should include significant performance
20
- # improvements under Ruby 1.8.
18
+ # Ruby 1.8 users are strongly advised to use Rev >= 0.3.2 to get
19
+ # usable performance.
21
20
 
22
21
  module RevThreadPool
23
22
 
@@ -15,9 +15,8 @@ module Rainbows
15
15
  # slow clients and applications with medium-to-slow response times
16
16
  # (I/O bound), but less suitable for sleepy applications.
17
17
  #
18
- # WARNING: this model does not currently perform well under 1.8 with
19
- # Rev 0.3.1. Rev 0.3.2 should include significant performance
20
- # improvements under Ruby 1.8.
18
+ # Ruby 1.8 users are strongly advised to use Rev >= 0.3.2 to get
19
+ # usable performance.
21
20
 
22
21
  module RevThreadSpawn
23
22
 
data/local.mk.sample CHANGED
@@ -6,14 +6,25 @@
6
6
 
7
7
  RSYNC = rsync
8
8
  DLEXT := so
9
- gems := rack-1.0.1
10
- # gems += unicorn-0.95.1 # installed via setup.rb
11
- gems += rev-0.3.1 # up to 0.3.2 once it's out for 1.8
9
+ gems := rack-1.1.0
10
+ # gems += unicorn-0.96.0 # installed via setup.rb
11
+ gems += rev-0.3.2
12
12
  gems += iobuffer-0.1.3
13
13
  gems += eventmachine-0.12.10
14
14
  gems += async_sinatra-0.1.5 sinatra-0.9.4
15
15
  gems += espace-neverblock-0.1.6.1
16
16
 
17
+ # Cramp isn't enabled by default since it depends on several prerelease gems
18
+ ifdef CRAMP
19
+ gems += cramp-0.7
20
+ gems += activesupport-3.0.pre
21
+ gems += activemodel-3.0.pre
22
+ gems += arel-0.2.pre
23
+ gems += usher-0.6.2
24
+ gems += fuzzyhash-0.0.11
25
+ gems += mysqlplus-0.1.1
26
+ endif
27
+
17
28
  # Avoid loading rubygems to speed up tests because gmake is
18
29
  # fork+exec heavy with Ruby.
19
30
  prefix = $(HOME)
data/rainbows.1 ADDED
File without changes
data/rainbows.gemspec CHANGED
@@ -41,7 +41,9 @@ Gem::Specification.new do |s|
41
41
  s.test_files = test_files
42
42
 
43
43
  # we need Unicorn for the HTTP parser and process management
44
- s.add_dependency(%q<unicorn>, ["~> 0.95.0", "< 0.97.0"])
44
+ # The HTTP parser in Unicorn < 0.96.1 did not use the Ruby
45
+ # API correctly and resulted in a memory leak
46
+ s.add_dependency(%q<unicorn>, ["~> 0.96.1", "< 0.97.0"])
45
47
 
46
48
  # Unicorn already depends on Rack
47
49
  # s.add_dependency(%q<rack>)
@@ -53,7 +55,7 @@ Gem::Specification.new do |s|
53
55
  # s.add_dependency(%q<revactor>, [">= 0.1.5"])
54
56
  #
55
57
  # Revactor depends on Rev, too, 0.3.0 got the ability to attach IOs
56
- # s.add_dependency(%q<rev>, [">= 0.3.1"])
58
+ # s.add_dependency(%q<rev>, [">= 0.3.2"])
57
59
  #
58
60
  # Rev depends on IOBuffer, which got faster in 0.1.3
59
61
  # s.add_dependency(%q<iobuffer>, [">= 0.1.3"])
data/t/GNUmakefile CHANGED
@@ -22,7 +22,14 @@ else
22
22
  endif
23
23
  export RUBYLIB RUBY_VERSION
24
24
 
25
- models = ThreadPool ThreadSpawn Rev EventMachine NeverBlock
25
+ models += ThreadPool
26
+ models += ThreadSpawn
27
+ models += Rev
28
+ models += EventMachine
29
+ models += NeverBlock
30
+ models += RevThreadSpawn
31
+ models += RevThreadPool
32
+
26
33
  rp := )
27
34
  ONENINE := $(shell case $(RUBY_VERSION) in 1.9.*$(rp) echo true;;esac)
28
35
  ifeq ($(ONENINE),true)
@@ -30,10 +37,6 @@ ifeq ($(ONENINE),true)
30
37
  models += FiberSpawn
31
38
  models += RevFiberSpawn
32
39
  models += FiberPool
33
-
34
- # technically this works under 1.8, but wait until rev 0.3.2
35
- models += RevThreadSpawn
36
- models += RevThreadPool
37
40
  endif
38
41
  all_models := $(models) Base
39
42
 
@@ -1,9 +1,9 @@
1
1
  #!/usr/bin/env ruby
2
+ # -*- encoding: binary -*-
2
3
  # simple chunked HTTP PUT request generator (and just that),
3
4
  # it reads stdin and writes to stdout so socat can write to a
4
5
  # UNIX or TCP socket (or to another filter or file) along with
5
6
  # a Content-MD5 trailer.
6
- # -*- encoding: binary -*-
7
7
  require 'digest/md5'
8
8
  $stdout.sync = $stderr.sync = true
9
9
  $stdout.binmode
data/t/bin/unused_listen CHANGED
@@ -1,4 +1,5 @@
1
1
  #!/usr/bin/env ruby
2
+ # -*- encoding: binary -*-
2
3
  # this is to remain compatible with the unused_port function in the
3
4
  # Unicorn test/test_helper.rb file
4
5
  require 'socket'
data/t/bin/utee CHANGED
@@ -1,8 +1,8 @@
1
1
  #!/usr/bin/env ruby
2
+ # -*- encoding: binary -*-
2
3
  # tee(1) as distributed on most(all?) systems is buffered in luserspace
3
4
  # this only does unbuffered writes (with line-buffered input) to make
4
5
  # test output appear in real-time
5
- # -*- encoding: binary -*-
6
6
  $stdin.binmode
7
7
  $stdout.binmode
8
8
  fp = File.open(ARGV.shift, "wb")
data/t/cramp/README ADDED
@@ -0,0 +1,3 @@
1
+ These examples in this directory are stolen from Cramp with only trivial
2
+ changes. All examples in this directory retain their original license
3
+ (MIT) and copyrights.
@@ -0,0 +1,28 @@
1
+ # based on examples/streaming.rb in git://github.com/lifo/cramp
2
+ # commit ca54f8a944ae582a0c858209daf3c74efea7d27c
3
+
4
+ # Rack::Lint does not like async + EM stuff, so disable it:
5
+ #\ -E deployment
6
+
7
+ require 'cramp/controller'
8
+
9
+ class StreamController < Cramp::Controller::Action
10
+ periodic_timer :send_data, :every => 1
11
+ periodic_timer :check_limit, :every => 2
12
+
13
+ def start
14
+ @limit = 0
15
+ end
16
+
17
+ def send_data
18
+ render ["Hello World", "\n"]
19
+ end
20
+
21
+ def check_limit
22
+ @limit += 1
23
+ finish if @limit > 1
24
+ end
25
+
26
+ end
27
+
28
+ run StreamController
@@ -0,0 +1,77 @@
1
+ #!/bin/sh
2
+ . ./test-lib.sh
3
+ case $model in
4
+ EventMachine) ;;
5
+ *)
6
+ t_info "skipping $T since it's not compatible with $model"
7
+ exit 0
8
+ ;;
9
+ esac
10
+ require_check cramp Cramp::VERSION
11
+
12
+ t_plan 7 "streaming test for Cramp"
13
+
14
+ CONFIG_RU=cramp/streaming.ru
15
+
16
+ t_begin "setup and start" && {
17
+ rainbows_setup
18
+ rtmpfiles a b c curl_err expect
19
+
20
+ # requiring Rubygems for this test only since Cramp depends on
21
+ # pre versions of several gems
22
+ # Like the rest of the EM/async stuff, it's not Rack::Lint compatible
23
+ rainbows -E deployment -D $CONFIG_RU -c $unicorn_config
24
+ rainbows_wait_start
25
+ }
26
+
27
+ # this will spew any unexpected input to stdout and be silent on success
28
+ check () {
29
+ (
30
+ t0=$(date +%s)
31
+ i=0
32
+ while read hello world
33
+ do
34
+ t1=$(date +%s)
35
+ diff=$(($t1 - $t0))
36
+ t_info "i=$i diff=$diff hello=$hello world=$world"
37
+ test $diff -ge 1 || echo "$i: diff: $diff < 1 second"
38
+ t0=$t1
39
+ test xHello = x"$hello" || echo "$i: Hello != $hello"
40
+ test xWorld = x"$world" || echo "$i: World != $world"
41
+ i=$(($i + 1))
42
+ test $i -le 3 || echo "$i: $i > 3"
43
+ done
44
+ )
45
+ }
46
+
47
+ t_begin "send async requests off in parallel" && {
48
+ t0=$(date +%s)
49
+ curl --no-buffer -sSf http://$listen/ 2>> $curl_err | check >$a 2>&1 &
50
+ curl --no-buffer -sSf http://$listen/ 2>> $curl_err | check >$b 2>&1 &
51
+ curl --no-buffer -sSf http://$listen/ 2>> $curl_err | check >$c 2>&1 &
52
+ }
53
+
54
+ t_begin "wait for curl terminations" && {
55
+ wait
56
+ t1=$(date +%s)
57
+ elapsed=$(( $t1 - $t0 ))
58
+ t_info "elapsed=$elapsed (should be 4-5s)"
59
+ }
60
+
61
+ t_begin "termination signal sent" && {
62
+ kill $rainbows_pid
63
+ }
64
+
65
+ t_begin "no errors from curl" && {
66
+ test ! -s $curl_err
67
+ }
68
+
69
+ t_begin "no errors in stderr" && check_stderr
70
+
71
+ t_begin "silence is golden" && {
72
+ test ! -s $a
73
+ test ! -s $b
74
+ test ! -s $c
75
+ }
76
+
77
+ t_done
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: rainbows
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.90.1
4
+ version: 0.90.2
5
5
  platform: ruby
6
6
  authors:
7
7
  - Rainbows! hackers
@@ -9,7 +9,7 @@ autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
11
 
12
- date: 2009-12-30 00:00:00 -08:00
12
+ date: 2010-02-13 00:00:00 +00:00
13
13
  default_executable:
14
14
  dependencies:
15
15
  - !ruby/object:Gem::Dependency
@@ -20,7 +20,7 @@ dependencies:
20
20
  requirements:
21
21
  - - ~>
22
22
  - !ruby/object:Gem::Version
23
- version: 0.95.0
23
+ version: 0.96.1
24
24
  - - <
25
25
  - !ruby/object:Gem::Version
26
26
  version: 0.97.0
@@ -77,6 +77,7 @@ extra_rdoc_files:
77
77
  - lib/rainbows/thread_spawn.rb
78
78
  - LICENSE
79
79
  - NEWS
80
+ - rainbows.1
80
81
  - README
81
82
  - SIGNALS
82
83
  - TODO
@@ -161,6 +162,8 @@ files:
161
162
  - t/bin/unused_listen
162
163
  - t/bin/utee
163
164
  - t/content-md5.ru
165
+ - t/cramp/README
166
+ - t/cramp/streaming.ru
164
167
  - t/env.ru
165
168
  - t/env_rack_env.ru
166
169
  - t/fork-sleep.ru
@@ -207,11 +210,13 @@ files:
207
210
  - t/t0300-async_sinatra.sh
208
211
  - t/t0400-em-async-app.sh
209
212
  - t/t0401-em-async-tailer.sh
213
+ - t/t0500-cramp-streaming.sh
210
214
  - t/t9000-rack-app-pool.sh
211
215
  - t/t9000.ru
212
216
  - t/test-lib.sh
213
217
  - t/worker-follows-master-to-death.ru
214
218
  - vs_Unicorn
219
+ - rainbows.1
215
220
  has_rdoc: true
216
221
  homepage: http://rainbows.rubyforge.org/
217
222
  licenses: []