mongrel 0.2.2 → 0.3
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/README +27 -25
- data/Rakefile +2 -3
- data/bin/mongrel_rails +114 -0
- data/doc/rdoc/classes/Mongrel.html +30 -0
- data/doc/rdoc/classes/Mongrel.src/M000001.html +18 -0
- data/doc/rdoc/classes/Mongrel/Const.html +2 -2
- data/doc/rdoc/classes/Mongrel/DirHandler.html +84 -21
- data/doc/rdoc/classes/Mongrel/DirHandler.src/M000009.html +7 -18
- data/doc/rdoc/classes/Mongrel/DirHandler.src/M000010.html +26 -9
- data/doc/rdoc/classes/Mongrel/DirHandler.src/M000011.html +27 -26
- data/doc/rdoc/classes/Mongrel/DirHandler.src/M000012.html +31 -0
- data/doc/rdoc/classes/Mongrel/DirHandler.src/M000013.html +38 -0
- data/doc/rdoc/classes/Mongrel/Error404Handler.html +10 -10
- data/doc/rdoc/classes/Mongrel/Error404Handler.src/{M000028.html → M000033.html} +4 -4
- data/doc/rdoc/classes/Mongrel/Error404Handler.src/{M000029.html → M000034.html} +4 -4
- data/doc/rdoc/classes/Mongrel/HeaderOut.html +10 -10
- data/doc/rdoc/classes/Mongrel/HeaderOut.src/{M000017.html → M000019.html} +4 -4
- data/doc/rdoc/classes/Mongrel/HeaderOut.src/{M000018.html → M000020.html} +7 -7
- data/doc/rdoc/classes/Mongrel/HttpHandler.html +5 -5
- data/doc/rdoc/classes/Mongrel/HttpHandler.src/{M000023.html → M000025.html} +3 -3
- data/doc/rdoc/classes/Mongrel/HttpParser.html +35 -35
- data/doc/rdoc/classes/Mongrel/HttpParser.src/M000002.html +5 -6
- data/doc/rdoc/classes/Mongrel/HttpParser.src/M000003.html +7 -7
- data/doc/rdoc/classes/Mongrel/HttpParser.src/M000004.html +8 -20
- data/doc/rdoc/classes/Mongrel/HttpParser.src/M000005.html +20 -6
- data/doc/rdoc/classes/Mongrel/HttpParser.src/M000006.html +5 -5
- data/doc/rdoc/classes/Mongrel/HttpParser.src/M000007.html +5 -6
- data/doc/rdoc/classes/Mongrel/HttpParser.src/{M000001.html → M000008.html} +6 -6
- data/doc/rdoc/classes/Mongrel/HttpRequest.html +5 -5
- data/doc/rdoc/classes/Mongrel/HttpRequest.src/{M000030.html → M000035.html} +17 -17
- data/doc/rdoc/classes/Mongrel/HttpResponse.html +66 -21
- data/doc/rdoc/classes/Mongrel/HttpResponse.src/M000026.html +8 -6
- data/doc/rdoc/classes/Mongrel/HttpResponse.src/M000027.html +7 -12
- data/doc/rdoc/classes/Mongrel/HttpResponse.src/M000028.html +19 -0
- data/doc/rdoc/classes/Mongrel/HttpResponse.src/M000029.html +18 -0
- data/doc/rdoc/classes/Mongrel/HttpResponse.src/M000030.html +20 -0
- data/doc/rdoc/classes/Mongrel/HttpResponse.src/M000031.html +21 -0
- data/doc/rdoc/classes/Mongrel/HttpResponse.src/M000032.html +20 -0
- data/doc/rdoc/classes/Mongrel/HttpServer.html +28 -28
- data/doc/rdoc/classes/Mongrel/HttpServer.src/M000014.html +18 -10
- data/doc/rdoc/classes/Mongrel/HttpServer.src/M000015.html +51 -5
- data/doc/rdoc/classes/Mongrel/HttpServer.src/M000016.html +9 -4
- data/doc/rdoc/classes/Mongrel/HttpServer.src/M000017.html +18 -0
- data/doc/rdoc/classes/Mongrel/HttpServer.src/M000018.html +18 -0
- data/doc/rdoc/classes/Mongrel/URIClassifier.html +31 -21
- data/doc/rdoc/classes/Mongrel/URIClassifier.src/M000021.html +18 -15
- data/doc/rdoc/classes/Mongrel/URIClassifier.src/M000022.html +25 -42
- data/doc/rdoc/classes/Mongrel/URIClassifier.src/M000023.html +36 -0
- data/doc/rdoc/classes/Mongrel/URIClassifier.src/M000024.html +84 -0
- data/doc/rdoc/created.rid +1 -1
- data/doc/rdoc/files/README.html +32 -42
- data/doc/rdoc/files/ext/http11/http11_c.html +1 -1
- data/doc/rdoc/files/lib/mongrel_rb.html +1 -1
- data/doc/rdoc/fr_method_index.html +35 -30
- data/examples/simpletest.rb +16 -6
- data/ext/http11/http11.c +19 -3
- data/ext/http11/tst_search.c +2 -3
- data/lib/mongrel.rb +108 -20
- data/test/test_uriclassifier.rb +22 -1
- metadata +25 -19
- data/doc/rdoc/classes/Mongrel/DirHandler.src/M000008.html +0 -20
- data/doc/rdoc/classes/Mongrel/HttpResponse.src/M000024.html +0 -21
- data/doc/rdoc/classes/Mongrel/HttpResponse.src/M000025.html +0 -20
- data/doc/rdoc/classes/Mongrel/HttpServer.src/M000012.html +0 -31
- data/doc/rdoc/classes/Mongrel/HttpServer.src/M000013.html +0 -64
- data/doc/rdoc/classes/Mongrel/URIClassifier.src/M000019.html +0 -39
- data/doc/rdoc/classes/Mongrel/URIClassifier.src/M000020.html +0 -51
- data/lib/#mongrel.rb# +0 -493
data/README
CHANGED
|
@@ -11,26 +11,31 @@ scream without too many portability issues.
|
|
|
11
11
|
|
|
12
12
|
== Status
|
|
13
13
|
|
|
14
|
-
The 0.
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
14
|
+
The 0.3 release is the first official release to start supporting Ruby on Rails
|
|
15
|
+
and to have a more complete DirHandler for serving directories of files. This release
|
|
16
|
+
is actually closer to a full functioning web server than the previous releases.
|
|
17
|
+
|
|
18
|
+
The Rails support is pretty rough right now, but check out the bin/mongrel_rails file,
|
|
19
|
+
which should be installed into your PATH if you use a gem. You should be able to
|
|
20
|
+
do the following to run your Rails applications:
|
|
21
|
+
|
|
22
|
+
> cd myrailsapp
|
|
23
|
+
> mongrel_rails 0.0.0.0 3000
|
|
24
|
+
|
|
25
|
+
And then hit http://localhost:3000/ to see your app. One thing is that if you have
|
|
26
|
+
a public/index.html file then you'll get that served instead of your Rails application.
|
|
27
|
+
|
|
28
|
+
People with the daemons gem installed will see that mongrel_rails will go into the
|
|
29
|
+
background. You can kill it with:
|
|
30
|
+
|
|
31
|
+
> kill -TERM `cat log/mongrel-3000.pid`
|
|
32
|
+
|
|
33
|
+
Where "3000" is whatever port you told it to listen on when you ran it.
|
|
34
|
+
|
|
35
|
+
The file serving is still a little rough and the redirects might not work well, but
|
|
36
|
+
try it out and tell me about any weird errors. File uploads will definitely have some
|
|
37
|
+
problems.
|
|
38
|
+
|
|
34
39
|
|
|
35
40
|
== Install
|
|
36
41
|
|
|
@@ -43,6 +48,7 @@ who can build it for you.
|
|
|
43
48
|
|
|
44
49
|
Finally, the source includes a setup.rb for those who hate RubyGems.
|
|
45
50
|
|
|
51
|
+
|
|
46
52
|
== Usage
|
|
47
53
|
|
|
48
54
|
The examples/simpletest.rb file has the following code as the simplest
|
|
@@ -104,12 +110,8 @@ With the core of Mongrel completed I'm now turning to the next set of features
|
|
|
104
110
|
to make Mongrel useful for hosting web applications in a heavily utilized
|
|
105
111
|
production environment. Right now I'm looking at:
|
|
106
112
|
|
|
107
|
-
* Fast static file handling with directory listings.
|
|
108
|
-
* More testing on more platforms.
|
|
109
113
|
* An idea I've had for an insane caching handler which could speed up quite a
|
|
110
114
|
few deployments.
|
|
111
|
-
* General little things most web servers need.
|
|
112
|
-
* A nice management system or interface for controlling mongrel servers.
|
|
113
115
|
|
|
114
116
|
Overall though the goal of Mongrel is to be just enough HTTP to serve a Ruby
|
|
115
117
|
web application that sits behind a more complete web server. Everything
|
|
@@ -117,7 +119,7 @@ in the next will focus on actually hosting the major web frameworks for Ruby:
|
|
|
117
119
|
|
|
118
120
|
* Camping -- because it's already done (thanks Why).
|
|
119
121
|
* Ruby on Rails -- that's where my bread is buttered right now.
|
|
120
|
-
* Nitro --
|
|
122
|
+
* Nitro -- Nitro folks have already hooked this up and started using it. Nice.
|
|
121
123
|
* ????? -- Others people might be interested in.
|
|
122
124
|
|
|
123
125
|
== Contact
|
data/Rakefile
CHANGED
|
@@ -9,8 +9,7 @@ include FileUtils
|
|
|
9
9
|
|
|
10
10
|
setup_tests
|
|
11
11
|
setup_clean ["ext/http11/Makefile", "pkg", "lib/*.bundle", "ext/http11/*.bundle"]
|
|
12
|
-
setup_rdoc ['README', 'LICENSE', 'COPYING', 'lib/*.rb',
|
|
13
|
-
'doc/**/*.rdoc', 'ext/http11/http11.c']
|
|
12
|
+
setup_rdoc ['README', 'LICENSE', 'COPYING', 'lib/*.rb', 'doc/**/*.rdoc', 'ext/http11/http11.c']
|
|
14
13
|
|
|
15
14
|
desc "Does a full compile, test run"
|
|
16
15
|
task :default => [:compile, :test]
|
|
@@ -27,4 +26,4 @@ setup_extension("http11", "http11")
|
|
|
27
26
|
|
|
28
27
|
summary = "An experimental fast simple web server for Ruby."
|
|
29
28
|
test_file = "test/test_ws.rb"
|
|
30
|
-
setup_gem("mongrel", "0.
|
|
29
|
+
setup_gem("mongrel", "0.3", "Zed A. Shaw", summary, ['mongrel_rails'], test_file)
|
data/bin/mongrel_rails
ADDED
|
@@ -0,0 +1,114 @@
|
|
|
1
|
+
require 'rubygems'
|
|
2
|
+
require 'mongrel'
|
|
3
|
+
require 'cgi'
|
|
4
|
+
begin
|
|
5
|
+
require 'daemons/daemonize'
|
|
6
|
+
HAVE_DAEMONS=true
|
|
7
|
+
rescue
|
|
8
|
+
HAVE_DAEMONS=false
|
|
9
|
+
end
|
|
10
|
+
|
|
11
|
+
|
|
12
|
+
class CGIFixed < ::CGI
|
|
13
|
+
public :env_table
|
|
14
|
+
attr_reader :options
|
|
15
|
+
|
|
16
|
+
def initialize(params, data, out, *args)
|
|
17
|
+
@env_table = params
|
|
18
|
+
@args = *args
|
|
19
|
+
@input = StringIO.new(data)
|
|
20
|
+
@out = out
|
|
21
|
+
@options = {}
|
|
22
|
+
super(*args)
|
|
23
|
+
end
|
|
24
|
+
|
|
25
|
+
def header(options = "text/html")
|
|
26
|
+
if options.class == Hash
|
|
27
|
+
# passing in a header so need to keep the status around and other options
|
|
28
|
+
@options = options
|
|
29
|
+
end
|
|
30
|
+
|
|
31
|
+
super(options)
|
|
32
|
+
end
|
|
33
|
+
|
|
34
|
+
def status
|
|
35
|
+
s = @options["Status"] || @options["status"]
|
|
36
|
+
s[0 .. s.index(' ')] || "200"
|
|
37
|
+
end
|
|
38
|
+
|
|
39
|
+
def args
|
|
40
|
+
@args
|
|
41
|
+
end
|
|
42
|
+
|
|
43
|
+
def env_table
|
|
44
|
+
@env_table
|
|
45
|
+
end
|
|
46
|
+
|
|
47
|
+
def stdinput
|
|
48
|
+
@input
|
|
49
|
+
end
|
|
50
|
+
|
|
51
|
+
def stdoutput
|
|
52
|
+
@out
|
|
53
|
+
end
|
|
54
|
+
end
|
|
55
|
+
|
|
56
|
+
|
|
57
|
+
class RailsHandler < Mongrel::HttpHandler
|
|
58
|
+
def initialize(dir)
|
|
59
|
+
@files = Mongrel::DirHandler.new(dir,false)
|
|
60
|
+
@guard = Mutex.new
|
|
61
|
+
end
|
|
62
|
+
|
|
63
|
+
def process(request, response)
|
|
64
|
+
# not static, need to talk to rails
|
|
65
|
+
return if response.socket.closed?
|
|
66
|
+
|
|
67
|
+
if @files.can_serve(request.params["PATH_INFO"])
|
|
68
|
+
@files.process(request,response)
|
|
69
|
+
else
|
|
70
|
+
cgi = CGIFixed.new(request.params, request.body, response.socket)
|
|
71
|
+
begin
|
|
72
|
+
|
|
73
|
+
@guard.synchronize do
|
|
74
|
+
# Rails is not thread safe so must be run entirely within synchronize
|
|
75
|
+
Dispatcher.dispatch(cgi, ActionController::CgiRequest::DEFAULT_SESSION_OPTIONS, response.body)
|
|
76
|
+
end
|
|
77
|
+
|
|
78
|
+
response.status = cgi.status
|
|
79
|
+
response.send_status
|
|
80
|
+
response.send_body
|
|
81
|
+
rescue Object => rails_error
|
|
82
|
+
STDERR.puts "calling Dispatcher.dispatch #{rails_error}"
|
|
83
|
+
STDERR.puts rails_error.backtrace.join("\n")
|
|
84
|
+
end
|
|
85
|
+
end
|
|
86
|
+
end
|
|
87
|
+
end
|
|
88
|
+
|
|
89
|
+
|
|
90
|
+
if ARGV.length != 2
|
|
91
|
+
STDERR.puts "usage: mongrel_rails <host> <port>"
|
|
92
|
+
exit(1)
|
|
93
|
+
end
|
|
94
|
+
|
|
95
|
+
# store this for later since Daemonize insists on going to the / root
|
|
96
|
+
cwd = Dir.pwd
|
|
97
|
+
|
|
98
|
+
if HAVE_DAEMONS
|
|
99
|
+
STDERR.puts "Running Mongrel in the background. See log/mongrel.log for errors."
|
|
100
|
+
Daemonize.daemonize(log_file=File.join(cwd,"log","mongrel.log"))
|
|
101
|
+
else
|
|
102
|
+
STDERR.puts "Unable to daemonize. Running in foreground. Use CTRL-C to stop."
|
|
103
|
+
end
|
|
104
|
+
|
|
105
|
+
# and go back
|
|
106
|
+
Dir.chdir(cwd) do
|
|
107
|
+
require 'config/environment'
|
|
108
|
+
open(File.join(cwd,"log/mongrel-#{ARGV[1]}.pid"),"w") {|f| f.write(Process.pid) }
|
|
109
|
+
h = Mongrel::HttpServer.new(ARGV[0], ARGV[1])
|
|
110
|
+
h.register("/", RailsHandler.new(File.join(cwd,"public")))
|
|
111
|
+
h.run
|
|
112
|
+
|
|
113
|
+
h.acceptor.join
|
|
114
|
+
end
|
|
@@ -89,6 +89,13 @@ to service web application requests fast as possible.
|
|
|
89
89
|
|
|
90
90
|
</div>
|
|
91
91
|
|
|
92
|
+
<div id="method-list">
|
|
93
|
+
<h3 class="section-bar">Methods</h3>
|
|
94
|
+
|
|
95
|
+
<div class="name-list">
|
|
96
|
+
<a href="#M000001">add_mime_type</a>
|
|
97
|
+
</div>
|
|
98
|
+
</div>
|
|
92
99
|
|
|
93
100
|
</div>
|
|
94
101
|
|
|
@@ -141,6 +148,29 @@ href="Mongrel/Const.html">Mongrel::Const</a>.
|
|
|
141
148
|
|
|
142
149
|
|
|
143
150
|
<!-- if method_list -->
|
|
151
|
+
<div id="methods">
|
|
152
|
+
<h3 class="section-bar">Public Instance methods</h3>
|
|
153
|
+
|
|
154
|
+
<div id="method-M000001" class="method-detail">
|
|
155
|
+
<a name="M000001"></a>
|
|
156
|
+
|
|
157
|
+
<div class="method-heading">
|
|
158
|
+
<a href="Mongrel.src/M000001.html" target="Code" class="method-signature"
|
|
159
|
+
onclick="popupCode('Mongrel.src/M000001.html');return false;">
|
|
160
|
+
<span class="method-name">add_mime_type</span><span class="method-args">(extension, type)</span>
|
|
161
|
+
</a>
|
|
162
|
+
</div>
|
|
163
|
+
|
|
164
|
+
<div class="method-description">
|
|
165
|
+
<p>
|
|
166
|
+
There is a small number of default mime types for extensions, but this lets
|
|
167
|
+
you add any others you’ll need when serving content.
|
|
168
|
+
</p>
|
|
169
|
+
</div>
|
|
170
|
+
</div>
|
|
171
|
+
|
|
172
|
+
|
|
173
|
+
</div>
|
|
144
174
|
|
|
145
175
|
|
|
146
176
|
</div>
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
<?xml version="1.0" encoding="iso-8859-1"?>
|
|
2
|
+
<!DOCTYPE html
|
|
3
|
+
PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
|
|
4
|
+
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
|
|
5
|
+
|
|
6
|
+
<html>
|
|
7
|
+
<head>
|
|
8
|
+
<title>add_mime_type (Mongrel)</title>
|
|
9
|
+
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" />
|
|
10
|
+
<link rel="stylesheet" href="../.././rdoc-style.css" type="text/css" media="screen" />
|
|
11
|
+
</head>
|
|
12
|
+
<body class="standalone-code">
|
|
13
|
+
<pre> <span class="ruby-comment cmt"># File lib/mongrel.rb, line 577</span>
|
|
14
|
+
577: <span class="ruby-keyword kw">def</span> <span class="ruby-identifier">add_mime_type</span>(<span class="ruby-identifier">extension</span>, <span class="ruby-identifier">type</span>)
|
|
15
|
+
578: <span class="ruby-constant">MIME_TYPES</span>[<span class="ruby-identifier">extension</span>] = <span class="ruby-identifier">type</span>
|
|
16
|
+
579: <span class="ruby-keyword kw">end</span></pre>
|
|
17
|
+
</body>
|
|
18
|
+
</html>
|
|
@@ -230,7 +230,7 @@ DNS resolves. It is only here for completeness for the CGI standard.
|
|
|
230
230
|
<td width="3em"> </td>
|
|
231
231
|
<td class="context-item-desc">
|
|
232
232
|
The name/host of our server as given by the <a
|
|
233
|
-
href="HttpServer.html#
|
|
233
|
+
href="HttpServer.html#M000014">HttpServer.new</a>(host,port) call.
|
|
234
234
|
|
|
235
235
|
</td>
|
|
236
236
|
</tr>
|
|
@@ -241,7 +241,7 @@ href="HttpServer.html#M000012">HttpServer.new</a>(host,port) call.
|
|
|
241
241
|
<td width="3em"> </td>
|
|
242
242
|
<td class="context-item-desc">
|
|
243
243
|
The port of our server as given by the <a
|
|
244
|
-
href="HttpServer.html#
|
|
244
|
+
href="HttpServer.html#M000014">HttpServer.new</a>(host,port) call.
|
|
245
245
|
|
|
246
246
|
</td>
|
|
247
247
|
</tr>
|
|
@@ -103,10 +103,11 @@ than it simply gives a 404.
|
|
|
103
103
|
<h3 class="section-bar">Methods</h3>
|
|
104
104
|
|
|
105
105
|
<div class="name-list">
|
|
106
|
-
<a href="#
|
|
107
|
-
<a href="#
|
|
108
|
-
<a href="#
|
|
109
|
-
<a href="#
|
|
106
|
+
<a href="#M000010">can_serve</a>
|
|
107
|
+
<a href="#M000009">new</a>
|
|
108
|
+
<a href="#M000013">process</a>
|
|
109
|
+
<a href="#M000011">send_dir_listing</a>
|
|
110
|
+
<a href="#M000012">send_file</a>
|
|
110
111
|
</div>
|
|
111
112
|
</div>
|
|
112
113
|
|
|
@@ -118,9 +119,35 @@ than it simply gives a 404.
|
|
|
118
119
|
<div id="section">
|
|
119
120
|
|
|
120
121
|
|
|
122
|
+
<div id="constants-list">
|
|
123
|
+
<h3 class="section-bar">Constants</h3>
|
|
124
|
+
|
|
125
|
+
<div class="name-list">
|
|
126
|
+
<table summary="Constants">
|
|
127
|
+
<tr class="top-aligned-row context-row">
|
|
128
|
+
<td class="context-item-name">MIME_TYPES</td>
|
|
129
|
+
<td>=</td>
|
|
130
|
+
<td class="context-item-value">{ ".css" => "text/css", ".gif" => "image/gif", ".htm" => "text/html", ".html" => "text/html", ".jpeg" => "image/jpeg", ".jpg" => "image/jpeg", ".js" => "text/javascript", ".png" => "image/png", ".swf" => "application/x-shockwave-flash", ".txt" => "text/plain"</td>
|
|
131
|
+
</tr>
|
|
132
|
+
</table>
|
|
133
|
+
</div>
|
|
134
|
+
</div>
|
|
135
|
+
|
|
121
136
|
|
|
122
137
|
|
|
138
|
+
<div id="attribute-list">
|
|
139
|
+
<h3 class="section-bar">Attributes</h3>
|
|
123
140
|
|
|
141
|
+
<div class="name-list">
|
|
142
|
+
<table>
|
|
143
|
+
<tr class="top-aligned-row context-row">
|
|
144
|
+
<td class="context-item-name">path</td>
|
|
145
|
+
<td class="context-item-value"> [R] </td>
|
|
146
|
+
<td class="context-item-desc"></td>
|
|
147
|
+
</tr>
|
|
148
|
+
</table>
|
|
149
|
+
</div>
|
|
150
|
+
</div>
|
|
124
151
|
|
|
125
152
|
|
|
126
153
|
|
|
@@ -128,61 +155,97 @@ than it simply gives a 404.
|
|
|
128
155
|
<div id="methods">
|
|
129
156
|
<h3 class="section-bar">Public Class methods</h3>
|
|
130
157
|
|
|
131
|
-
<div id="method-
|
|
132
|
-
<a name="
|
|
158
|
+
<div id="method-M000009" class="method-detail">
|
|
159
|
+
<a name="M000009"></a>
|
|
133
160
|
|
|
134
161
|
<div class="method-heading">
|
|
135
|
-
<a href="DirHandler.src/
|
|
136
|
-
onclick="popupCode('DirHandler.src/
|
|
137
|
-
<span class="method-name">new</span><span class="method-args">(path, listing_allowed=true)</span>
|
|
162
|
+
<a href="DirHandler.src/M000009.html" target="Code" class="method-signature"
|
|
163
|
+
onclick="popupCode('DirHandler.src/M000009.html');return false;">
|
|
164
|
+
<span class="method-name">new</span><span class="method-args">(path, listing_allowed=true, index_html="index.html")</span>
|
|
138
165
|
</a>
|
|
139
166
|
</div>
|
|
140
167
|
|
|
141
168
|
<div class="method-description">
|
|
169
|
+
<p>
|
|
170
|
+
You give it the path to the directory root and an (optional)
|
|
171
|
+
</p>
|
|
142
172
|
</div>
|
|
143
173
|
</div>
|
|
144
174
|
|
|
145
175
|
<h3 class="section-bar">Public Instance methods</h3>
|
|
146
176
|
|
|
147
|
-
<div id="method-
|
|
148
|
-
<a name="
|
|
177
|
+
<div id="method-M000010" class="method-detail">
|
|
178
|
+
<a name="M000010"></a>
|
|
149
179
|
|
|
150
180
|
<div class="method-heading">
|
|
151
|
-
<a href="DirHandler.src/
|
|
152
|
-
onclick="popupCode('DirHandler.src/
|
|
181
|
+
<a href="DirHandler.src/M000010.html" target="Code" class="method-signature"
|
|
182
|
+
onclick="popupCode('DirHandler.src/M000010.html');return false;">
|
|
183
|
+
<span class="method-name">can_serve</span><span class="method-args">(path_info)</span>
|
|
184
|
+
</a>
|
|
185
|
+
</div>
|
|
186
|
+
|
|
187
|
+
<div class="method-description">
|
|
188
|
+
<p>
|
|
189
|
+
Checks if the given path can be served and returns the full path (or nil if
|
|
190
|
+
not).
|
|
191
|
+
</p>
|
|
192
|
+
</div>
|
|
193
|
+
</div>
|
|
194
|
+
|
|
195
|
+
<div id="method-M000013" class="method-detail">
|
|
196
|
+
<a name="M000013"></a>
|
|
197
|
+
|
|
198
|
+
<div class="method-heading">
|
|
199
|
+
<a href="DirHandler.src/M000013.html" target="Code" class="method-signature"
|
|
200
|
+
onclick="popupCode('DirHandler.src/M000013.html');return false;">
|
|
153
201
|
<span class="method-name">process</span><span class="method-args">(request, response)</span>
|
|
154
202
|
</a>
|
|
155
203
|
</div>
|
|
156
204
|
|
|
157
205
|
<div class="method-description">
|
|
206
|
+
<p>
|
|
207
|
+
Process the request to either serve a file or a directory listing if
|
|
208
|
+
allowed (based on the listing_allowed paramter to the constructor).
|
|
209
|
+
</p>
|
|
158
210
|
</div>
|
|
159
211
|
</div>
|
|
160
212
|
|
|
161
|
-
<div id="method-
|
|
162
|
-
<a name="
|
|
213
|
+
<div id="method-M000011" class="method-detail">
|
|
214
|
+
<a name="M000011"></a>
|
|
163
215
|
|
|
164
216
|
<div class="method-heading">
|
|
165
|
-
<a href="DirHandler.src/
|
|
166
|
-
onclick="popupCode('DirHandler.src/
|
|
217
|
+
<a href="DirHandler.src/M000011.html" target="Code" class="method-signature"
|
|
218
|
+
onclick="popupCode('DirHandler.src/M000011.html');return false;">
|
|
167
219
|
<span class="method-name">send_dir_listing</span><span class="method-args">(base, dir, response)</span>
|
|
168
220
|
</a>
|
|
169
221
|
</div>
|
|
170
222
|
|
|
171
223
|
<div class="method-description">
|
|
224
|
+
<p>
|
|
225
|
+
Returns a simplistic directory listing if they’re enabled, otherwise
|
|
226
|
+
a 403. Base is the base URI from the REQUEST_URI, dir is the directory to
|
|
227
|
+
serve on the file system (comes from <a
|
|
228
|
+
href="DirHandler.html#M000010">can_serve</a>()), and response is the <a
|
|
229
|
+
href="HttpResponse.html">HttpResponse</a> object to send the results on.
|
|
230
|
+
</p>
|
|
172
231
|
</div>
|
|
173
232
|
</div>
|
|
174
233
|
|
|
175
|
-
<div id="method-
|
|
176
|
-
<a name="
|
|
234
|
+
<div id="method-M000012" class="method-detail">
|
|
235
|
+
<a name="M000012"></a>
|
|
177
236
|
|
|
178
237
|
<div class="method-heading">
|
|
179
|
-
<a href="DirHandler.src/
|
|
180
|
-
onclick="popupCode('DirHandler.src/
|
|
238
|
+
<a href="DirHandler.src/M000012.html" target="Code" class="method-signature"
|
|
239
|
+
onclick="popupCode('DirHandler.src/M000012.html');return false;">
|
|
181
240
|
<span class="method-name">send_file</span><span class="method-args">(req, response)</span>
|
|
182
241
|
</a>
|
|
183
242
|
</div>
|
|
184
243
|
|
|
185
244
|
<div class="method-description">
|
|
245
|
+
<p>
|
|
246
|
+
Sends the contents of a file back to the user. Not terribly efficient since
|
|
247
|
+
it’s opening and closing the file for each read.
|
|
248
|
+
</p>
|
|
186
249
|
</div>
|
|
187
250
|
</div>
|
|
188
251
|
|