rack-mongrel2 0.1.1 → 0.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.
- data/.gitignore +2 -1
- data/.rvmrc +1 -1
- data/Gemfile +2 -2
- data/Gemfile.lock +6 -4
- data/README.rdoc +5 -4
- data/VERSION +1 -1
- data/example/sinatra/.gitignore +3 -0
- data/example/sinatra/app.rb +20 -20
- data/example/sinatra/config.ru +3 -1
- data/example/sinatra/mongrel2.conf +25 -0
- data/lib/mongrel2.rb +13 -0
- data/lib/mongrel2/connection.rb +3 -2
- data/lib/mongrel2/request.rb +3 -3
- data/lib/mongrel2/response.rb +1 -1
- data/lib/rack/handler/mongrel2.rb +10 -6
- data/rack-mongrel2.gemspec +10 -7
- metadata +34 -39
data/.gitignore
CHANGED
data/.rvmrc
CHANGED
@@ -1 +1 @@
|
|
1
|
-
rvm use
|
1
|
+
rvm use 1.9.2@rack-mongrel2
|
data/Gemfile
CHANGED
data/Gemfile.lock
CHANGED
@@ -2,6 +2,9 @@ GEM
|
|
2
2
|
remote: http://rubygems.org/
|
3
3
|
specs:
|
4
4
|
diff-lcs (1.1.2)
|
5
|
+
ffi (0.6.3)
|
6
|
+
rake (>= 0.8.7)
|
7
|
+
ffi-rzmq (0.6.0)
|
5
8
|
gemcutter (0.6.1)
|
6
9
|
git (1.2.5)
|
7
10
|
jeweler (1.4.0)
|
@@ -9,6 +12,7 @@ GEM
|
|
9
12
|
git (>= 1.2.5)
|
10
13
|
rubyforge (>= 2.0.0)
|
11
14
|
json_pure (1.4.6)
|
15
|
+
rake (0.8.7)
|
12
16
|
rspec (2.0.1)
|
13
17
|
rspec-core (~> 2.0.1)
|
14
18
|
rspec-expectations (~> 2.0.1)
|
@@ -21,16 +25,14 @@ GEM
|
|
21
25
|
rspec-expectations (~> 2.0.1)
|
22
26
|
rubyforge (2.0.4)
|
23
27
|
json_pure (>= 1.1.7)
|
24
|
-
yajl-ruby (0.7.8)
|
25
28
|
yard (0.6.1)
|
26
|
-
zmq (2.0.9)
|
27
29
|
|
28
30
|
PLATFORMS
|
29
31
|
ruby
|
30
32
|
|
31
33
|
DEPENDENCIES
|
34
|
+
ffi (~> 0.6.3)
|
35
|
+
ffi-rzmq (~> 0.6.0)
|
32
36
|
jeweler (~> 1.4.0)
|
33
37
|
rspec (~> 2.0.1)
|
34
|
-
yajl-ruby (~> 0.7.8)
|
35
38
|
yard (~> 0.6.1)
|
36
|
-
zmq (~> 2.0.9)
|
data/README.rdoc
CHANGED
@@ -2,7 +2,7 @@
|
|
2
2
|
|
3
3
|
The only Mongrel2 Rack handler you'll ever need.
|
4
4
|
|
5
|
-
I wrote this because I wanted to learn Mongrel2, and I didn't like what was out there. I copy-pasted a lot of code from Colin Curtin's m2r project (http://github.com/perplexes/m2r), but I also changed and reorganized it into what I believe is a good setup for a proper rubygem.
|
5
|
+
I wrote this because I wanted to learn Mongrel2, and I didn't like what was out there. I copy-pasted a lot of code from Colin Curtin's m2r project (http://github.com/perplexes/m2r), but I also changed and reorganized it into what I believe is a good setup for a proper rubygem.
|
6
6
|
|
7
7
|
== How to use
|
8
8
|
|
@@ -12,12 +12,13 @@ I wrote this because I wanted to learn Mongrel2, and I didn't like what was out
|
|
12
12
|
|
13
13
|
gem 'rack-mongrel2', '~> 0.1.0', :require => nil
|
14
14
|
|
15
|
-
4.
|
16
|
-
5. Run
|
15
|
+
4. You also need some sort of JSON parsing library installed, like Yajl or JSON (gem i yajl-ruby or gem i json). json-jruby will work too
|
16
|
+
5. Run Mongrel2
|
17
|
+
6. Run your rails application
|
17
18
|
|
18
19
|
RACK_MONGREL2_UUID=<my uuid> rails s Mongrel2
|
19
20
|
|
20
|
-
|
21
|
+
7. Profit!
|
21
22
|
|
22
23
|
I'll write a better blog post soon...
|
23
24
|
|
data/VERSION
CHANGED
@@ -1 +1 @@
|
|
1
|
-
0.
|
1
|
+
0.2.0
|
data/example/sinatra/app.rb
CHANGED
@@ -1,24 +1,24 @@
|
|
1
1
|
require 'sinatra'
|
2
|
-
require 'yajl/json_gem'
|
3
2
|
|
4
3
|
get '*' do
|
5
|
-
|
6
|
-
|
7
|
-
|
8
|
-
|
9
|
-
|
10
|
-
|
11
|
-
|
12
|
-
|
13
|
-
|
14
|
-
|
15
|
-
|
16
|
-
|
17
|
-
|
18
|
-
|
19
|
-
|
20
|
-
|
21
|
-
|
22
|
-
|
23
|
-
|
4
|
+
'Hello, World!'
|
5
|
+
# items = request.env.map do |k,v|
|
6
|
+
# "<li><strong>#{k}</strong>: #{v}</li>"
|
7
|
+
# end.join("\n")
|
8
|
+
# %Q{
|
9
|
+
# <html>
|
10
|
+
# <head>
|
11
|
+
# <title>Sinatra Mongrel2 Test</title>
|
12
|
+
# </head>
|
13
|
+
# <body>
|
14
|
+
# <h1>env</h1>
|
15
|
+
# <ul>
|
16
|
+
# #{items}
|
17
|
+
# </ul>
|
18
|
+
# <hr />
|
19
|
+
# <h1>Params</h1>
|
20
|
+
# #{params}
|
21
|
+
# </body>
|
22
|
+
# </html>
|
23
|
+
# }
|
24
24
|
end
|
data/example/sinatra/config.ru
CHANGED
@@ -1,6 +1,8 @@
|
|
1
1
|
$: << File.expand_path(File.join(File.dirname(__FILE__), '..', '..', 'lib'))
|
2
|
+
$:.unshift(File.expand_path('.')) # Ruby 1.9 doesn't have . in the load path...
|
2
3
|
|
3
4
|
require 'rack/handler/mongrel2'
|
4
5
|
require 'app'
|
5
6
|
|
6
|
-
Rack::Handler::Mongrel2.run Sinatra::Application
|
7
|
+
Rack::Handler::Mongrel2.run Sinatra::Application, :uuid => 'sinatra', :block => true
|
8
|
+
exit(0)
|
@@ -0,0 +1,25 @@
|
|
1
|
+
darkblog2 = Host(name='localhost', routes={
|
2
|
+
'/': Handler(send_spec='tcp://127.0.0.1:9997',
|
3
|
+
send_ident='sinatra',
|
4
|
+
recv_spec='tcp://127.0.0.1:9996',
|
5
|
+
recv_ident='')
|
6
|
+
})
|
7
|
+
|
8
|
+
main = Server(
|
9
|
+
uuid='sinatra-example',
|
10
|
+
chroot='.',
|
11
|
+
access_log='/run/access.log',
|
12
|
+
error_log='/run/error.log',
|
13
|
+
pid_file='/run/mongrel2.pid',
|
14
|
+
default_host='localhost',
|
15
|
+
name='main',
|
16
|
+
port=8080,
|
17
|
+
hosts=[darkblog2]
|
18
|
+
)
|
19
|
+
|
20
|
+
|
21
|
+
settings = {
|
22
|
+
'zeromq.threads': 1
|
23
|
+
}
|
24
|
+
|
25
|
+
servers = [main]
|
data/lib/mongrel2.rb
ADDED
@@ -0,0 +1,13 @@
|
|
1
|
+
begin
|
2
|
+
require 'yajl'
|
3
|
+
rescue LoadError
|
4
|
+
begin
|
5
|
+
require 'json'
|
6
|
+
rescue LoadError
|
7
|
+
raise "You need either the yajl or json gems present in order to parse JSON!"
|
8
|
+
end
|
9
|
+
end
|
10
|
+
|
11
|
+
module Mongrel2
|
12
|
+
JSON = Object.const_defined?('Yajl') ? ::Yajl::Parser : ::JSON
|
13
|
+
end
|
data/lib/mongrel2/connection.rb
CHANGED
@@ -1,4 +1,4 @@
|
|
1
|
-
require '
|
1
|
+
require 'ffi-rzmq'
|
2
2
|
require 'mongrel2/request'
|
3
3
|
require 'mongrel2/response'
|
4
4
|
|
@@ -20,7 +20,8 @@ module Mongrel2
|
|
20
20
|
end
|
21
21
|
|
22
22
|
def recv
|
23
|
-
|
23
|
+
msg = @reqs.recv_string(@block ? 0 : ZMQ::NOBLOCK)
|
24
|
+
msg.nil? ? nil : Request.parse(msg)
|
24
25
|
end
|
25
26
|
|
26
27
|
def reply(req, body, status = 200, headers = {})
|
data/lib/mongrel2/request.rb
CHANGED
@@ -1,4 +1,4 @@
|
|
1
|
-
require '
|
1
|
+
require 'mongrel2'
|
2
2
|
|
3
3
|
module Mongrel2
|
4
4
|
class Request
|
@@ -10,7 +10,7 @@ module Mongrel2
|
|
10
10
|
uuid, conn_id, path, rest = msg.split(' ', 4)
|
11
11
|
headers, rest = parse_netstring(rest)
|
12
12
|
body, _ = parse_netstring(rest)
|
13
|
-
headers =
|
13
|
+
headers = Mongrel2::JSON.parse(headers)
|
14
14
|
new(uuid, conn_id, path, headers, body)
|
15
15
|
end
|
16
16
|
|
@@ -26,7 +26,7 @@ module Mongrel2
|
|
26
26
|
|
27
27
|
def initialize(uuid, conn_id, path, headers, body)
|
28
28
|
@uuid, @conn_id, @path, @headers, @body = uuid, conn_id, path, headers, body
|
29
|
-
@data = headers['METHOD'] == 'JSON' ?
|
29
|
+
@data = headers['METHOD'] == 'JSON' ? Mongrel2::JSON.parse(body) : {}
|
30
30
|
end
|
31
31
|
|
32
32
|
def disconnect?
|
data/lib/mongrel2/response.rb
CHANGED
@@ -54,7 +54,7 @@ module Mongrel2
|
|
54
54
|
private
|
55
55
|
|
56
56
|
def send_resp(uuid, conn_id, data)
|
57
|
-
@resp.
|
57
|
+
@resp.send_string('%s %d:%s, %s' % [uuid, conn_id.size, conn_id, data])
|
58
58
|
end
|
59
59
|
|
60
60
|
def build_http_response(body, status, headers)
|
@@ -9,25 +9,29 @@ module Rack
|
|
9
9
|
options = {
|
10
10
|
:recv => 'tcp://127.0.0.1:9997' || ENV['RACK_MONGREL2_RECV'],
|
11
11
|
:send => 'tcp://127.0.0.1:9996' || ENV['RACK_MONGREL2_SEND'],
|
12
|
-
:uuid => ENV['RACK_MONGREL2_UUID']
|
12
|
+
:uuid => ENV['RACK_MONGREL2_UUID'],
|
13
|
+
:block => ENV['RACK_MONGREL2_NONBLOCK'].to_s.match(/1|t(?:rue)?|y(?:es)/i).nil?
|
13
14
|
}.merge(options)
|
15
|
+
|
14
16
|
raise ArgumentError.new('Must specify an :uuid or set RACK_MONGREL2_UUID') if options[:uuid].nil?
|
15
17
|
|
16
|
-
conn = ::Mongrel2::Connection.new(options[:uuid], options[:recv], options[:send])
|
18
|
+
conn = ::Mongrel2::Connection.new(options[:uuid], options[:recv], options[:send], options[:block])
|
17
19
|
|
18
20
|
running = true
|
19
21
|
|
20
|
-
# This doesn't work at all
|
21
|
-
%w(INT TERM).each do |sig|
|
22
|
+
# This doesn't work at all until zmq fixes their shit
|
23
|
+
%w(INT TERM KILL).each do |sig|
|
22
24
|
trap(sig) do
|
25
|
+
conn.close
|
23
26
|
running = false
|
24
27
|
end
|
25
28
|
end
|
26
29
|
|
27
30
|
while running
|
28
31
|
req = conn.recv
|
29
|
-
next if req.
|
30
|
-
|
32
|
+
sleep(1) and next if req.nil? && options[:block]
|
33
|
+
next if req.nil? || req.disconnect?
|
34
|
+
return if !running
|
31
35
|
|
32
36
|
script_name = ENV['RACK_RELATIVE_URL_ROOT'] || req.headers['PATTERN'].split('(', 2).first.gsub(/\/$/, '')
|
33
37
|
env = {
|
data/rack-mongrel2.gemspec
CHANGED
@@ -5,7 +5,7 @@
|
|
5
5
|
|
6
6
|
Gem::Specification.new do |s|
|
7
7
|
s.name = %q{rack-mongrel2}
|
8
|
-
s.version = "0.
|
8
|
+
s.version = "0.2.0"
|
9
9
|
|
10
10
|
s.required_rubygems_version = Gem::Requirement.new(">= 0") if s.respond_to? :required_rubygems_version=
|
11
11
|
s.authors = ["Daniel Huckstep"]
|
@@ -27,8 +27,11 @@ Gem::Specification.new do |s|
|
|
27
27
|
"Rakefile",
|
28
28
|
"VERSION",
|
29
29
|
"example/mongrel2.conf",
|
30
|
+
"example/sinatra/.gitignore",
|
30
31
|
"example/sinatra/app.rb",
|
31
32
|
"example/sinatra/config.ru",
|
33
|
+
"example/sinatra/mongrel2.conf",
|
34
|
+
"lib/mongrel2.rb",
|
32
35
|
"lib/mongrel2/connection.rb",
|
33
36
|
"lib/mongrel2/request.rb",
|
34
37
|
"lib/mongrel2/response.rb",
|
@@ -53,21 +56,21 @@ Gem::Specification.new do |s|
|
|
53
56
|
s.specification_version = 3
|
54
57
|
|
55
58
|
if Gem::Version.new(Gem::VERSION) >= Gem::Version.new('1.2.0') then
|
56
|
-
s.add_runtime_dependency(%q<
|
57
|
-
s.add_runtime_dependency(%q<
|
59
|
+
s.add_runtime_dependency(%q<ffi>, ["~> 0.6.3"])
|
60
|
+
s.add_runtime_dependency(%q<ffi-rzmq>, ["~> 0.6.0"])
|
58
61
|
s.add_development_dependency(%q<jeweler>, ["~> 1.4.0"])
|
59
62
|
s.add_development_dependency(%q<rspec>, ["~> 2.0.1"])
|
60
63
|
s.add_development_dependency(%q<yard>, ["~> 0.6.1"])
|
61
64
|
else
|
62
|
-
s.add_dependency(%q<
|
63
|
-
s.add_dependency(%q<
|
65
|
+
s.add_dependency(%q<ffi>, ["~> 0.6.3"])
|
66
|
+
s.add_dependency(%q<ffi-rzmq>, ["~> 0.6.0"])
|
64
67
|
s.add_dependency(%q<jeweler>, ["~> 1.4.0"])
|
65
68
|
s.add_dependency(%q<rspec>, ["~> 2.0.1"])
|
66
69
|
s.add_dependency(%q<yard>, ["~> 0.6.1"])
|
67
70
|
end
|
68
71
|
else
|
69
|
-
s.add_dependency(%q<
|
70
|
-
s.add_dependency(%q<
|
72
|
+
s.add_dependency(%q<ffi>, ["~> 0.6.3"])
|
73
|
+
s.add_dependency(%q<ffi-rzmq>, ["~> 0.6.0"])
|
71
74
|
s.add_dependency(%q<jeweler>, ["~> 1.4.0"])
|
72
75
|
s.add_dependency(%q<rspec>, ["~> 2.0.1"])
|
73
76
|
s.add_dependency(%q<yard>, ["~> 0.6.1"])
|
metadata
CHANGED
@@ -1,13 +1,12 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: rack-mongrel2
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
hash: 25
|
5
4
|
prerelease: false
|
6
5
|
segments:
|
7
6
|
- 0
|
8
|
-
-
|
9
|
-
-
|
10
|
-
version: 0.
|
7
|
+
- 2
|
8
|
+
- 0
|
9
|
+
version: 0.2.0
|
11
10
|
platform: ruby
|
12
11
|
authors:
|
13
12
|
- Daniel Huckstep
|
@@ -19,85 +18,80 @@ date: 2010-10-24 00:00:00 -06:00
|
|
19
18
|
default_executable:
|
20
19
|
dependencies:
|
21
20
|
- !ruby/object:Gem::Dependency
|
22
|
-
|
23
|
-
|
24
|
-
name: yajl-ruby
|
25
|
-
version_requirements: &id001 !ruby/object:Gem::Requirement
|
21
|
+
name: ffi
|
22
|
+
requirement: &id001 !ruby/object:Gem::Requirement
|
26
23
|
none: false
|
27
24
|
requirements:
|
28
25
|
- - ~>
|
29
26
|
- !ruby/object:Gem::Version
|
30
|
-
hash: 19
|
31
27
|
segments:
|
32
28
|
- 0
|
33
|
-
-
|
34
|
-
-
|
35
|
-
version: 0.
|
36
|
-
requirement: *id001
|
37
|
-
- !ruby/object:Gem::Dependency
|
38
|
-
prerelease: false
|
29
|
+
- 6
|
30
|
+
- 3
|
31
|
+
version: 0.6.3
|
39
32
|
type: :runtime
|
40
|
-
|
41
|
-
version_requirements:
|
33
|
+
prerelease: false
|
34
|
+
version_requirements: *id001
|
35
|
+
- !ruby/object:Gem::Dependency
|
36
|
+
name: ffi-rzmq
|
37
|
+
requirement: &id002 !ruby/object:Gem::Requirement
|
42
38
|
none: false
|
43
39
|
requirements:
|
44
40
|
- - ~>
|
45
41
|
- !ruby/object:Gem::Version
|
46
|
-
hash: 29
|
47
42
|
segments:
|
48
|
-
- 2
|
49
43
|
- 0
|
50
|
-
-
|
51
|
-
|
52
|
-
|
53
|
-
|
44
|
+
- 6
|
45
|
+
- 0
|
46
|
+
version: 0.6.0
|
47
|
+
type: :runtime
|
54
48
|
prerelease: false
|
55
|
-
|
49
|
+
version_requirements: *id002
|
50
|
+
- !ruby/object:Gem::Dependency
|
56
51
|
name: jeweler
|
57
|
-
|
52
|
+
requirement: &id003 !ruby/object:Gem::Requirement
|
58
53
|
none: false
|
59
54
|
requirements:
|
60
55
|
- - ~>
|
61
56
|
- !ruby/object:Gem::Version
|
62
|
-
hash: 7
|
63
57
|
segments:
|
64
58
|
- 1
|
65
59
|
- 4
|
66
60
|
- 0
|
67
61
|
version: 1.4.0
|
68
|
-
requirement: *id003
|
69
|
-
- !ruby/object:Gem::Dependency
|
70
|
-
prerelease: false
|
71
62
|
type: :development
|
63
|
+
prerelease: false
|
64
|
+
version_requirements: *id003
|
65
|
+
- !ruby/object:Gem::Dependency
|
72
66
|
name: rspec
|
73
|
-
|
67
|
+
requirement: &id004 !ruby/object:Gem::Requirement
|
74
68
|
none: false
|
75
69
|
requirements:
|
76
70
|
- - ~>
|
77
71
|
- !ruby/object:Gem::Version
|
78
|
-
hash: 13
|
79
72
|
segments:
|
80
73
|
- 2
|
81
74
|
- 0
|
82
75
|
- 1
|
83
76
|
version: 2.0.1
|
84
|
-
requirement: *id004
|
85
|
-
- !ruby/object:Gem::Dependency
|
86
|
-
prerelease: false
|
87
77
|
type: :development
|
78
|
+
prerelease: false
|
79
|
+
version_requirements: *id004
|
80
|
+
- !ruby/object:Gem::Dependency
|
88
81
|
name: yard
|
89
|
-
|
82
|
+
requirement: &id005 !ruby/object:Gem::Requirement
|
90
83
|
none: false
|
91
84
|
requirements:
|
92
85
|
- - ~>
|
93
86
|
- !ruby/object:Gem::Version
|
94
|
-
hash: 5
|
95
87
|
segments:
|
96
88
|
- 0
|
97
89
|
- 6
|
98
90
|
- 1
|
99
91
|
version: 0.6.1
|
100
|
-
|
92
|
+
type: :development
|
93
|
+
prerelease: false
|
94
|
+
version_requirements: *id005
|
101
95
|
description: A Rack handler for the Mongrel2 web server, by Zed Shaw. http://mongrel2.org/
|
102
96
|
email: darkhelmet@darkhelmetlive.com
|
103
97
|
executables: []
|
@@ -118,8 +112,11 @@ files:
|
|
118
112
|
- Rakefile
|
119
113
|
- VERSION
|
120
114
|
- example/mongrel2.conf
|
115
|
+
- example/sinatra/.gitignore
|
121
116
|
- example/sinatra/app.rb
|
122
117
|
- example/sinatra/config.ru
|
118
|
+
- example/sinatra/mongrel2.conf
|
119
|
+
- lib/mongrel2.rb
|
123
120
|
- lib/mongrel2/connection.rb
|
124
121
|
- lib/mongrel2/request.rb
|
125
122
|
- lib/mongrel2/response.rb
|
@@ -142,7 +139,6 @@ required_ruby_version: !ruby/object:Gem::Requirement
|
|
142
139
|
requirements:
|
143
140
|
- - ">="
|
144
141
|
- !ruby/object:Gem::Version
|
145
|
-
hash: 3
|
146
142
|
segments:
|
147
143
|
- 0
|
148
144
|
version: "0"
|
@@ -151,7 +147,6 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
151
147
|
requirements:
|
152
148
|
- - ">="
|
153
149
|
- !ruby/object:Gem::Version
|
154
|
-
hash: 3
|
155
150
|
segments:
|
156
151
|
- 0
|
157
152
|
version: "0"
|