headius-mongrel 1.1.6.1
Sign up to get free protection for your applications and to get access to all the features.
- data/CHANGELOG +21 -0
- data/COPYING +55 -0
- data/LICENSE +55 -0
- data/Manifest +69 -0
- data/README +74 -0
- data/Rakefile +202 -0
- data/TODO +5 -0
- data/bin/mongrel_rails +283 -0
- data/examples/builder.rb +29 -0
- data/examples/camping/README +3 -0
- data/examples/camping/blog.rb +294 -0
- data/examples/camping/tepee.rb +149 -0
- data/examples/httpd.conf +474 -0
- data/examples/mime.yaml +3 -0
- data/examples/mongrel.conf +9 -0
- data/examples/mongrel_simple_ctrl.rb +92 -0
- data/examples/mongrel_simple_service.rb +116 -0
- data/examples/monitrc +57 -0
- data/examples/random_thrash.rb +19 -0
- data/examples/simpletest.rb +52 -0
- data/examples/webrick_compare.rb +20 -0
- data/ext/http11/ext_help.h +14 -0
- data/ext/http11/extconf.rb +6 -0
- data/ext/http11/http11.c +402 -0
- data/ext/http11/http11_parser.c +1221 -0
- data/ext/http11/http11_parser.h +49 -0
- data/ext/http11/http11_parser.java.rl +170 -0
- data/ext/http11/http11_parser.rl +152 -0
- data/ext/http11/http11_parser_common.rl +54 -0
- data/ext/http11_java/Http11Service.java +13 -0
- data/ext/http11_java/org/jruby/mongrel/Http11.java +353 -0
- data/ext/http11_java/org/jruby/mongrel/Http11Parser.java +572 -0
- data/lib/mongrel.rb +364 -0
- data/lib/mongrel/camping.rb +107 -0
- data/lib/mongrel/cgi.rb +181 -0
- data/lib/mongrel/command.rb +222 -0
- data/lib/mongrel/configurator.rb +388 -0
- data/lib/mongrel/const.rb +110 -0
- data/lib/mongrel/debug.rb +203 -0
- data/lib/mongrel/gems.rb +22 -0
- data/lib/mongrel/handlers.rb +468 -0
- data/lib/mongrel/header_out.rb +28 -0
- data/lib/mongrel/http_request.rb +155 -0
- data/lib/mongrel/http_response.rb +163 -0
- data/lib/mongrel/init.rb +10 -0
- data/lib/mongrel/mime_types.yml +616 -0
- data/lib/mongrel/rails.rb +192 -0
- data/lib/mongrel/stats.rb +89 -0
- data/lib/mongrel/tcphack.rb +18 -0
- data/lib/mongrel/uri_classifier.rb +76 -0
- data/mongrel-public_cert.pem +20 -0
- data/mongrel.gemspec +47 -0
- data/setup.rb +1585 -0
- data/test/mime.yaml +3 -0
- data/test/mongrel.conf +1 -0
- data/test/test_cgi_wrapper.rb +26 -0
- data/test/test_command.rb +86 -0
- data/test/test_conditional.rb +107 -0
- data/test/test_configurator.rb +88 -0
- data/test/test_debug.rb +25 -0
- data/test/test_handlers.rb +126 -0
- data/test/test_http11.rb +156 -0
- data/test/test_redirect_handler.rb +45 -0
- data/test/test_request_progress.rb +100 -0
- data/test/test_response.rb +127 -0
- data/test/test_stats.rb +35 -0
- data/test/test_uriclassifier.rb +261 -0
- data/test/test_ws.rb +115 -0
- data/test/testhelp.rb +79 -0
- data/tools/trickletest.rb +45 -0
- metadata +199 -0
@@ -0,0 +1,192 @@
|
|
1
|
+
# Copyright (c) 2005 Zed A. Shaw
|
2
|
+
# You can redistribute it and/or modify it under the same terms as Ruby.
|
3
|
+
#
|
4
|
+
# Additional work donated by contributors. See http://mongrel.rubyforge.org/attributions.html
|
5
|
+
# for more information.
|
6
|
+
|
7
|
+
require 'mongrel'
|
8
|
+
require 'cgi'
|
9
|
+
|
10
|
+
|
11
|
+
module Mongrel
|
12
|
+
module Rails
|
13
|
+
# Implements a handler that can run Rails and serve files out of the
|
14
|
+
# Rails application's public directory. This lets you run your Rails
|
15
|
+
# application with Mongrel during development and testing, then use it
|
16
|
+
# also in production behind a server that's better at serving the
|
17
|
+
# static files.
|
18
|
+
#
|
19
|
+
# The RailsHandler takes a mime_map parameter which is a simple suffix=mimetype
|
20
|
+
# mapping that it should add to the list of valid mime types.
|
21
|
+
#
|
22
|
+
# It also supports page caching directly and will try to resolve a request
|
23
|
+
# in the following order:
|
24
|
+
#
|
25
|
+
# * If the requested exact PATH_INFO exists as a file then serve it.
|
26
|
+
# * If it exists at PATH_INFO+".html" exists then serve that.
|
27
|
+
# * Finally, construct a Mongrel::CGIWrapper and run Dispatcher.dispatch to have Rails go.
|
28
|
+
#
|
29
|
+
# This means that if you are using page caching it will actually work with Mongrel
|
30
|
+
# and you should see a decent speed boost (but not as fast as if you use a static
|
31
|
+
# server like Apache or Litespeed).
|
32
|
+
class RailsHandler < Mongrel::HttpHandler
|
33
|
+
attr_reader :files
|
34
|
+
attr_reader :guard
|
35
|
+
@@file_only_methods = ["GET","HEAD"]
|
36
|
+
|
37
|
+
def initialize(dir, mime_map = {})
|
38
|
+
@files = Mongrel::DirHandler.new(dir,false)
|
39
|
+
@guard = Mutex.new
|
40
|
+
|
41
|
+
# Register the requested MIME types
|
42
|
+
mime_map.each {|k,v| Mongrel::DirHandler::add_mime_type(k,v) }
|
43
|
+
end
|
44
|
+
|
45
|
+
# Attempts to resolve the request as follows:
|
46
|
+
#
|
47
|
+
# * If the requested exact PATH_INFO exists as a file then serve it.
|
48
|
+
# * If it exists at PATH_INFO+".html" exists then serve that.
|
49
|
+
# * Finally, construct a Mongrel::CGIWrapper and run Dispatcher.dispatch to have Rails go.
|
50
|
+
def process(request, response)
|
51
|
+
return if response.socket.closed?
|
52
|
+
|
53
|
+
path_info = request.params[Mongrel::Const::PATH_INFO]
|
54
|
+
rest_operator = request.params[Mongrel::Const::REQUEST_URI][/^#{Regexp.escape path_info}(;[^\?]+)/, 1].to_s
|
55
|
+
path_info.chomp!("/")
|
56
|
+
|
57
|
+
page_cached = path_info + rest_operator + ActionController::Base.page_cache_extension
|
58
|
+
get_or_head = @@file_only_methods.include? request.params[Mongrel::Const::REQUEST_METHOD]
|
59
|
+
|
60
|
+
if get_or_head and @files.can_serve(path_info)
|
61
|
+
# File exists as-is so serve it up
|
62
|
+
@files.process(request,response)
|
63
|
+
elsif get_or_head and @files.can_serve(page_cached)
|
64
|
+
# Possible cached page, serve it up
|
65
|
+
request.params[Mongrel::Const::PATH_INFO] = page_cached
|
66
|
+
@files.process(request,response)
|
67
|
+
else
|
68
|
+
begin
|
69
|
+
cgi = Mongrel::CGIWrapper.new(request, response)
|
70
|
+
cgi.handler = self
|
71
|
+
# We don't want the output to be really final until we're out of the lock
|
72
|
+
cgi.default_really_final = false
|
73
|
+
|
74
|
+
if ActionController::Base.allow_concurrency
|
75
|
+
_dispatch_unlocked(cgi, request, response)
|
76
|
+
else
|
77
|
+
@guard.synchronize { _dispatch_unlocked(cgi, request, response) }
|
78
|
+
end
|
79
|
+
# This finalizes the output using the proper HttpResponse way
|
80
|
+
cgi.out("text/html",true) {""}
|
81
|
+
rescue Errno::EPIPE
|
82
|
+
response.socket.close
|
83
|
+
rescue Object => rails_error
|
84
|
+
STDERR.puts "#{Time.now}: Error calling Dispatcher.dispatch #{rails_error.inspect}"
|
85
|
+
STDERR.puts rails_error.backtrace.join("\n")
|
86
|
+
end
|
87
|
+
end
|
88
|
+
end
|
89
|
+
|
90
|
+
# Does the internal reload for Rails. It might work for most cases, but
|
91
|
+
# sometimes you get exceptions. In that case just do a real restart.
|
92
|
+
def reload!
|
93
|
+
begin
|
94
|
+
@guard.synchronize {
|
95
|
+
$".replace $orig_dollar_quote
|
96
|
+
GC.start
|
97
|
+
Dispatcher.reset_application!
|
98
|
+
ActionController::Routing::Routes.reload
|
99
|
+
}
|
100
|
+
end
|
101
|
+
end
|
102
|
+
|
103
|
+
private
|
104
|
+
|
105
|
+
def _dispatch_unlocked(cgi, request, response)
|
106
|
+
@active_request_path = request.params[Mongrel::Const::PATH_INFO]
|
107
|
+
Dispatcher.dispatch(cgi, ActionController::CgiRequest::DEFAULT_SESSION_OPTIONS, response.body)
|
108
|
+
@active_request_path = nil
|
109
|
+
end
|
110
|
+
end
|
111
|
+
|
112
|
+
# Creates Rails specific configuration options for people to use
|
113
|
+
# instead of the base Configurator.
|
114
|
+
class RailsConfigurator < Mongrel::Configurator
|
115
|
+
|
116
|
+
# Creates a single rails handler and returns it so you
|
117
|
+
# can add it to a URI. You can actually attach it to
|
118
|
+
# as many URIs as you want, but this returns the
|
119
|
+
# same RailsHandler for each call.
|
120
|
+
#
|
121
|
+
# Requires the following options:
|
122
|
+
#
|
123
|
+
# * :docroot => The public dir to serve from.
|
124
|
+
# * :environment => Rails environment to use.
|
125
|
+
# * :cwd => The change to working directory
|
126
|
+
#
|
127
|
+
# And understands the following optional settings:
|
128
|
+
#
|
129
|
+
# * :mime => A map of mime types.
|
130
|
+
#
|
131
|
+
# Because of how Rails is designed you can only have
|
132
|
+
# one installed per Ruby interpreter (talk to them
|
133
|
+
# about thread safety). Because of this the first
|
134
|
+
# time you call this function it does all the config
|
135
|
+
# needed to get your Rails working. After that
|
136
|
+
# it returns the one handler you've configured.
|
137
|
+
# This lets you attach Rails to any URI(s) you want,
|
138
|
+
# but it still protects you from threads destroying
|
139
|
+
# your handler.
|
140
|
+
def rails(options={})
|
141
|
+
|
142
|
+
return @rails_handler if @rails_handler
|
143
|
+
|
144
|
+
ops = resolve_defaults(options)
|
145
|
+
|
146
|
+
# fix up some defaults
|
147
|
+
ops[:environment] ||= "development"
|
148
|
+
ops[:docroot] ||= "public"
|
149
|
+
ops[:mime] ||= {}
|
150
|
+
|
151
|
+
$orig_dollar_quote = $".clone
|
152
|
+
ENV['RAILS_ENV'] = ops[:environment]
|
153
|
+
env_location = "#{ops[:cwd]}/config/environment"
|
154
|
+
require env_location
|
155
|
+
require 'dispatcher'
|
156
|
+
require 'mongrel/rails'
|
157
|
+
|
158
|
+
ActionController::AbstractRequest.relative_url_root = ops[:prefix] if ops[:prefix]
|
159
|
+
|
160
|
+
@rails_handler = RailsHandler.new(ops[:docroot], ops[:mime])
|
161
|
+
end
|
162
|
+
|
163
|
+
# Reloads Rails. This isn't too reliable really, but it
|
164
|
+
# should work for most minimal reload purposes. The only reliable
|
165
|
+
# way to reload properly is to stop and then start the process.
|
166
|
+
def reload!
|
167
|
+
if not @rails_handler
|
168
|
+
raise "Rails was not configured. Read the docs for RailsConfigurator."
|
169
|
+
end
|
170
|
+
|
171
|
+
log "Reloading Rails..."
|
172
|
+
@rails_handler.reload!
|
173
|
+
log "Done reloading Rails."
|
174
|
+
|
175
|
+
end
|
176
|
+
|
177
|
+
# Takes the exact same configuration as Mongrel::Configurator (and actually calls that)
|
178
|
+
# but sets up the additional HUP handler to call reload!.
|
179
|
+
def setup_rails_signals(options={})
|
180
|
+
ops = resolve_defaults(options)
|
181
|
+
setup_signals(options)
|
182
|
+
|
183
|
+
if RUBY_PLATFORM !~ /mswin|mingw/
|
184
|
+
# rails reload
|
185
|
+
trap("HUP") { log "HUP signal received."; reload! }
|
186
|
+
|
187
|
+
log "Rails signals registered. HUP => reload (without restart). It might not work well."
|
188
|
+
end
|
189
|
+
end
|
190
|
+
end
|
191
|
+
end
|
192
|
+
end
|
@@ -0,0 +1,89 @@
|
|
1
|
+
# Copyright (c) 2005 Zed A. Shaw
|
2
|
+
# You can redistribute it and/or modify it under the same terms as Ruby.
|
3
|
+
#
|
4
|
+
# Additional work donated by contributors. See http://mongrel.rubyforge.org/attributions.html
|
5
|
+
# for more information.
|
6
|
+
|
7
|
+
# A very simple little class for doing some basic fast statistics sampling.
|
8
|
+
# You feed it either samples of numeric data you want measured or you call
|
9
|
+
# Stats.tick to get it to add a time delta between the last time you called it.
|
10
|
+
# When you're done either call sum, sumsq, n, min, max, mean or sd to get
|
11
|
+
# the information. The other option is to just call dump and see everything.
|
12
|
+
#
|
13
|
+
# It does all of this very fast and doesn't take up any memory since the samples
|
14
|
+
# are not stored but instead all the values are calculated on the fly.
|
15
|
+
module Mongrel
|
16
|
+
class Stats
|
17
|
+
attr_reader :sum, :sumsq, :n, :min, :max
|
18
|
+
|
19
|
+
def initialize(name)
|
20
|
+
@name = name
|
21
|
+
reset
|
22
|
+
end
|
23
|
+
|
24
|
+
# Resets the internal counters so you can start sampling again.
|
25
|
+
def reset
|
26
|
+
@sum = 0.0
|
27
|
+
@sumsq = 0.0
|
28
|
+
@last_time = Time.new
|
29
|
+
@n = 0.0
|
30
|
+
@min = 0.0
|
31
|
+
@max = 0.0
|
32
|
+
end
|
33
|
+
|
34
|
+
# Adds a sampling to the calculations.
|
35
|
+
def sample(s)
|
36
|
+
@sum += s
|
37
|
+
@sumsq += s * s
|
38
|
+
if @n == 0
|
39
|
+
@min = @max = s
|
40
|
+
else
|
41
|
+
@min = s if @min > s
|
42
|
+
@max = s if @max < s
|
43
|
+
end
|
44
|
+
@n+=1
|
45
|
+
end
|
46
|
+
|
47
|
+
# Dump this Stats object with an optional additional message.
|
48
|
+
def dump(msg = "", out=STDERR)
|
49
|
+
out.puts "#{msg}: #{self.to_s}"
|
50
|
+
end
|
51
|
+
|
52
|
+
# Returns a common display (used by dump)
|
53
|
+
def to_s
|
54
|
+
"[#{@name}]: SUM=%0.4f, SUMSQ=%0.4f, N=%0.4f, MEAN=%0.4f, SD=%0.4f, MIN=%0.4f, MAX=%0.4f" % [@sum, @sumsq, @n, mean, sd, @min, @max]
|
55
|
+
end
|
56
|
+
|
57
|
+
|
58
|
+
# Calculates and returns the mean for the data passed so far.
|
59
|
+
def mean
|
60
|
+
@sum / @n
|
61
|
+
end
|
62
|
+
|
63
|
+
# Calculates the standard deviation of the data so far.
|
64
|
+
def sd
|
65
|
+
# (sqrt( ((s).sumsq - ( (s).sum * (s).sum / (s).n)) / ((s).n-1) ))
|
66
|
+
begin
|
67
|
+
return Math.sqrt( (@sumsq - ( @sum * @sum / @n)) / (@n-1) )
|
68
|
+
rescue Errno::EDOM
|
69
|
+
return 0.0
|
70
|
+
end
|
71
|
+
end
|
72
|
+
|
73
|
+
|
74
|
+
# Adds a time delta between now and the last time you called this. This
|
75
|
+
# will give you the average time between two activities.
|
76
|
+
#
|
77
|
+
# An example is:
|
78
|
+
#
|
79
|
+
# t = Stats.new("do_stuff")
|
80
|
+
# 10000.times { do_stuff(); t.tick }
|
81
|
+
# t.dump("time")
|
82
|
+
#
|
83
|
+
def tick
|
84
|
+
now = Time.now
|
85
|
+
sample(now - @last_time)
|
86
|
+
@last_time = now
|
87
|
+
end
|
88
|
+
end
|
89
|
+
end
|
@@ -0,0 +1,18 @@
|
|
1
|
+
# Copyright (c) 2005 Zed A. Shaw
|
2
|
+
# You can redistribute it and/or modify it under the same terms as Ruby.
|
3
|
+
#
|
4
|
+
# Additional work donated by contributors. See http://mongrel.rubyforge.org/attributions.html
|
5
|
+
# for more information.
|
6
|
+
|
7
|
+
|
8
|
+
# A modification proposed by Sean Treadway that increases the default accept
|
9
|
+
# queue of TCPServer to 1024 so that it handles more concurrent requests.
|
10
|
+
class TCPServer
|
11
|
+
def initialize_with_backlog(*args)
|
12
|
+
initialize_without_backlog(*args)
|
13
|
+
listen(1024)
|
14
|
+
end
|
15
|
+
|
16
|
+
alias_method :initialize_without_backlog, :initialize
|
17
|
+
alias_method :initialize, :initialize_with_backlog
|
18
|
+
end
|
@@ -0,0 +1,76 @@
|
|
1
|
+
|
2
|
+
module Mongrel
|
3
|
+
class URIClassifier
|
4
|
+
|
5
|
+
class RegistrationError < RuntimeError
|
6
|
+
end
|
7
|
+
class UsageError < RuntimeError
|
8
|
+
end
|
9
|
+
|
10
|
+
attr_reader :handler_map
|
11
|
+
|
12
|
+
# Returns the URIs that have been registered with this classifier so far.
|
13
|
+
def uris
|
14
|
+
@handler_map.keys
|
15
|
+
end
|
16
|
+
|
17
|
+
def initialize
|
18
|
+
@handler_map = {}
|
19
|
+
@matcher = //
|
20
|
+
@root_handler = nil
|
21
|
+
end
|
22
|
+
|
23
|
+
# Register a handler object at a particular URI. The handler can be whatever
|
24
|
+
# you want, including an array. It's up to you what to do with it.
|
25
|
+
#
|
26
|
+
# Registering a handler is not necessarily threadsafe, so be careful if you go
|
27
|
+
# mucking around once the server is running.
|
28
|
+
def register(uri, handler)
|
29
|
+
raise RegistrationError, "#{uri.inspect} is already registered" if @handler_map[uri]
|
30
|
+
raise RegistrationError, "URI is empty" if !uri or uri.empty?
|
31
|
+
raise RegistrationError, "URI must begin with a \"#{Const::SLASH}\"" unless uri[0..0] == Const::SLASH
|
32
|
+
@handler_map[uri.dup] = handler
|
33
|
+
rebuild
|
34
|
+
end
|
35
|
+
|
36
|
+
# Unregister a particular URI and its handler.
|
37
|
+
def unregister(uri)
|
38
|
+
handler = @handler_map.delete(uri)
|
39
|
+
raise RegistrationError, "#{uri.inspect} was not registered" unless handler
|
40
|
+
rebuild
|
41
|
+
handler
|
42
|
+
end
|
43
|
+
|
44
|
+
# Resolve a request URI by finding the best partial match in the registered
|
45
|
+
# handler URIs.
|
46
|
+
def resolve(request_uri)
|
47
|
+
if @root_handler
|
48
|
+
# Optimization for the pathological case of only one handler on "/"; e.g. Rails
|
49
|
+
[Const::SLASH, request_uri, @root_handler]
|
50
|
+
elsif match = @matcher.match(request_uri)
|
51
|
+
uri = match.to_s
|
52
|
+
# A root mounted ("/") handler must resolve such that path info matches the original URI.
|
53
|
+
[uri, (uri == Const::SLASH ? request_uri : match.post_match), @handler_map[uri]]
|
54
|
+
else
|
55
|
+
[nil, nil, nil]
|
56
|
+
end
|
57
|
+
end
|
58
|
+
|
59
|
+
private
|
60
|
+
|
61
|
+
def rebuild
|
62
|
+
if @handler_map.size == 1 and @handler_map[Const::SLASH]
|
63
|
+
@root_handler = @handler_map.values.first
|
64
|
+
else
|
65
|
+
@root_handler = nil
|
66
|
+
routes = @handler_map.keys.sort.sort_by do |uri|
|
67
|
+
-uri.length
|
68
|
+
end
|
69
|
+
@matcher = Regexp.new(routes.map do |uri|
|
70
|
+
Regexp.new('^' + Regexp.escape(uri))
|
71
|
+
end.join('|'))
|
72
|
+
end
|
73
|
+
end
|
74
|
+
|
75
|
+
end
|
76
|
+
end
|
@@ -0,0 +1,20 @@
|
|
1
|
+
-----BEGIN CERTIFICATE-----
|
2
|
+
MIIDUDCCAjigAwIBAgIBADANBgkqhkiG9w0BAQUFADBOMRwwGgYDVQQDDBNtb25n
|
3
|
+
cmVsLWRldmVsb3BtZW50MRkwFwYKCZImiZPyLGQBGRYJcnVieWZvcmdlMRMwEQYK
|
4
|
+
CZImiZPyLGQBGRYDb3JnMB4XDTA3MDkxNjEwMzI0OVoXDTA4MDkxNTEwMzI0OVow
|
5
|
+
TjEcMBoGA1UEAwwTbW9uZ3JlbC1kZXZlbG9wbWVudDEZMBcGCgmSJomT8ixkARkW
|
6
|
+
CXJ1Ynlmb3JnZTETMBEGCgmSJomT8ixkARkWA29yZzCCASIwDQYJKoZIhvcNAQEB
|
7
|
+
BQADggEPADCCAQoCggEBAMb9v3B01eOHk3FyypbQgKXzJplUE5P6dXoG+xpPm0Lv
|
8
|
+
P7BQmeMncOwqQ7zXpVQU+lTpXtQFTsOE3vL7KnhQFJKGvUAkbh24VFyopu1I0yqF
|
9
|
+
mGu4nRqNXGXVj8TvLSj4S1WpSRLAa0acLPNyKhGmoV9+crqQypSjM6XKjBeppifo
|
10
|
+
4eBmWGjiJEYMIJBvJZPJ4rAVDDA8C6CM1m3gMBGNh8ELDhU8HI9AP3dMIkTI2Wx9
|
11
|
+
9xkJwHdroAaS0IFFtYChrwee4FbCF1FHDgoTosMwa47DrLHg4hZ6ojaKwK5QVWEV
|
12
|
+
XGb6ju5UqpktnSWF2W+Lvl/K0tI42OH2CAhebT1gEVUCAwEAAaM5MDcwCQYDVR0T
|
13
|
+
BAIwADALBgNVHQ8EBAMCBLAwHQYDVR0OBBYEFGHChyMSZ16u9WOzKhgJSQ9lqDc5
|
14
|
+
MA0GCSqGSIb3DQEBBQUAA4IBAQA/lfeN2WdB1xN+82tT7vNS4HOjRQw6MUh5yktu
|
15
|
+
GQjaGqm0UB+aX0Z9y0B0qpfv9rj7nmIvEGiwBmDepNWYCGuW15JyqpN7QVVnG2xS
|
16
|
+
Mrame7VqgjM7A+VGDD5In5LtWbM/CHAATvvFlQ5Ph13YE1EdnVbZ65c+KQv+5sFY
|
17
|
+
Q+zEop74d878uaC/SAHHXS46TiXneocaLSYw1CEZs/MAIy+9c4Q5ESbGpgnfg1Ad
|
18
|
+
6lwl7k3hsNHO/+tZzx4HJtOXDI1yAl3+q6T9J0yI3z97EinwvAKhS1eyOI2Y5eeT
|
19
|
+
tbQaNYkU127B3l/VNpd8fQm3Jkl/PqCCmDBQjUszFrJEODug
|
20
|
+
-----END CERTIFICATE-----
|
data/mongrel.gemspec
ADDED
@@ -0,0 +1,47 @@
|
|
1
|
+
# -*- encoding: utf-8 -*-
|
2
|
+
|
3
|
+
Gem::Specification.new do |s|
|
4
|
+
s.name = %q{mongrel}
|
5
|
+
s.version = "1.1.6.1"
|
6
|
+
|
7
|
+
s.required_rubygems_version = Gem::Requirement.new(">= 1.2") if s.respond_to? :required_rubygems_version=
|
8
|
+
s.authors = ["Zed A. Shaw"]
|
9
|
+
s.date = %q{2009-06-11}
|
10
|
+
s.default_executable = %q{mongrel_rails}
|
11
|
+
s.description = %q{A small fast HTTP library and server that runs Rails, Camping, Nitro and Iowa apps.}
|
12
|
+
s.email = %q{}
|
13
|
+
s.executables = ["mongrel_rails"]
|
14
|
+
s.extensions = ["ext/http11/extconf.rb"]
|
15
|
+
s.extra_rdoc_files = ["CHANGELOG", "COPYING", "lib/mongrel/camping.rb", "lib/mongrel/cgi.rb", "lib/mongrel/command.rb", "lib/mongrel/configurator.rb", "lib/mongrel/const.rb", "lib/mongrel/debug.rb", "lib/mongrel/gems.rb", "lib/mongrel/handlers.rb", "lib/mongrel/header_out.rb", "lib/mongrel/http_request.rb", "lib/mongrel/http_response.rb", "lib/mongrel/init.rb", "lib/mongrel/rails.rb", "lib/mongrel/stats.rb", "lib/mongrel/tcphack.rb", "lib/mongrel/uri_classifier.rb", "lib/mongrel.rb", "LICENSE", "README"]
|
16
|
+
s.files = ["bin/mongrel_rails", "CHANGELOG", "COPYING", "examples/builder.rb", "examples/camping/blog.rb", "examples/camping/README", "examples/camping/tepee.rb", "examples/httpd.conf", "examples/mime.yaml", "examples/mongrel.conf", "examples/mongrel_simple_ctrl.rb", "examples/mongrel_simple_service.rb", "examples/monitrc", "examples/random_thrash.rb", "examples/simpletest.rb", "examples/webrick_compare.rb", "ext/http11/ext_help.h", "ext/http11/extconf.rb", "ext/http11/http11.c", "ext/http11/http11_parser.c", "ext/http11/http11_parser.h", "ext/http11/http11_parser.java.rl", "ext/http11/http11_parser.rl", "ext/http11/http11_parser_common.rl", "ext/http11_java/Http11Service.java", "ext/http11_java/org/jruby/mongrel/Http11.java", "ext/http11_java/org/jruby/mongrel/Http11Parser.java", "lib/mongrel/camping.rb", "lib/mongrel/cgi.rb", "lib/mongrel/command.rb", "lib/mongrel/configurator.rb", "lib/mongrel/const.rb", "lib/mongrel/debug.rb", "lib/mongrel/gems.rb", "lib/mongrel/handlers.rb", "lib/mongrel/header_out.rb", "lib/mongrel/http_request.rb", "lib/mongrel/http_response.rb", "lib/mongrel/init.rb", "lib/mongrel/mime_types.yml", "lib/mongrel/rails.rb", "lib/mongrel/stats.rb", "lib/mongrel/tcphack.rb", "lib/mongrel/uri_classifier.rb", "lib/mongrel.rb", "LICENSE", "Manifest", "mongrel-public_cert.pem", "mongrel.gemspec", "README", "setup.rb", "test/mime.yaml", "test/mongrel.conf", "test/test_cgi_wrapper.rb", "test/test_command.rb", "test/test_conditional.rb", "test/test_configurator.rb", "test/test_debug.rb", "test/test_handlers.rb", "test/test_http11.rb", "test/test_redirect_handler.rb", "test/test_request_progress.rb", "test/test_response.rb", "test/test_stats.rb", "test/test_uriclassifier.rb", "test/test_ws.rb", "test/testhelp.rb", "TODO", "tools/trickletest.rb", "Rakefile"]
|
17
|
+
s.homepage = %q{http://mongrel.rubyforge.org}
|
18
|
+
s.rdoc_options = ["--line-numbers", "--inline-source", "--title", "Mongrel", "--main", "README"]
|
19
|
+
s.require_paths = ["lib", "ext"]
|
20
|
+
s.required_ruby_version = Gem::Requirement.new(">= 1.8.4")
|
21
|
+
s.rubyforge_project = %q{mongrel}
|
22
|
+
s.rubygems_version = %q{1.3.3}
|
23
|
+
s.summary = %q{A small fast HTTP library and server that runs Rails, Camping, Nitro and Iowa apps.}
|
24
|
+
s.test_files = ["test/test_cgi_wrapper.rb", "test/test_command.rb", "test/test_conditional.rb", "test/test_configurator.rb", "test/test_debug.rb", "test/test_handlers.rb", "test/test_http11.rb", "test/test_redirect_handler.rb", "test/test_request_progress.rb", "test/test_response.rb", "test/test_stats.rb", "test/test_uriclassifier.rb", "test/test_ws.rb"]
|
25
|
+
|
26
|
+
if s.respond_to? :specification_version then
|
27
|
+
current_version = Gem::Specification::CURRENT_SPECIFICATION_VERSION
|
28
|
+
s.specification_version = 3
|
29
|
+
|
30
|
+
if Gem::Version.new(Gem::RubyGemsVersion) >= Gem::Version.new('1.2.0') then
|
31
|
+
s.add_runtime_dependency(%q<gem_plugin>, [">= 0.2.3"])
|
32
|
+
s.add_runtime_dependency(%q<daemons>, [">= 1.0.3"])
|
33
|
+
s.add_runtime_dependency(%q<fastthread>, [">= 1.0.1"])
|
34
|
+
s.add_runtime_dependency(%q<cgi_multipart_eof_fix>, [">= 2.4"])
|
35
|
+
else
|
36
|
+
s.add_dependency(%q<gem_plugin>, [">= 0.2.3"])
|
37
|
+
s.add_dependency(%q<daemons>, [">= 1.0.3"])
|
38
|
+
s.add_dependency(%q<fastthread>, [">= 1.0.1"])
|
39
|
+
s.add_dependency(%q<cgi_multipart_eof_fix>, [">= 2.4"])
|
40
|
+
end
|
41
|
+
else
|
42
|
+
s.add_dependency(%q<gem_plugin>, [">= 0.2.3"])
|
43
|
+
s.add_dependency(%q<daemons>, [">= 1.0.3"])
|
44
|
+
s.add_dependency(%q<fastthread>, [">= 1.0.1"])
|
45
|
+
s.add_dependency(%q<cgi_multipart_eof_fix>, [">= 2.4"])
|
46
|
+
end
|
47
|
+
end
|