mongrel 0.3.1 → 0.3.2
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 +4 -1
- data/Rakefile +1 -1
- data/bin/mongrel_rails +77 -24
- data/doc/rdoc/classes/Mongrel.html +0 -30
- data/doc/rdoc/classes/Mongrel/DirHandler.html +45 -26
- data/doc/rdoc/classes/Mongrel/DirHandler.src/M000022.html +20 -0
- data/doc/rdoc/classes/Mongrel/DirHandler.src/M000023.html +29 -7
- data/doc/rdoc/classes/Mongrel/DirHandler.src/M000024.html +27 -29
- data/doc/rdoc/classes/Mongrel/DirHandler.src/M000025.html +18 -27
- data/doc/rdoc/classes/Mongrel/DirHandler.src/M000026.html +25 -18
- data/doc/rdoc/classes/Mongrel/DirHandler.src/M000027.html +5 -25
- data/doc/rdoc/classes/Mongrel/Error404Handler.src/M000047.html +4 -4
- data/doc/rdoc/classes/Mongrel/Error404Handler.src/M000048.html +4 -4
- data/doc/rdoc/classes/Mongrel/HttpParser.html +35 -35
- data/doc/rdoc/classes/Mongrel/HttpParser.src/{M000022.html → M000015.html} +6 -6
- data/doc/rdoc/classes/Mongrel/HttpParser.src/M000016.html +6 -5
- data/doc/rdoc/classes/Mongrel/HttpParser.src/M000017.html +7 -7
- data/doc/rdoc/classes/Mongrel/HttpParser.src/M000018.html +20 -8
- data/doc/rdoc/classes/Mongrel/HttpParser.src/M000019.html +6 -20
- data/doc/rdoc/classes/Mongrel/HttpParser.src/M000020.html +5 -5
- data/doc/rdoc/classes/Mongrel/HttpParser.src/M000021.html +6 -5
- data/doc/rdoc/classes/Mongrel/HttpServer.html +1 -1
- data/doc/rdoc/classes/Mongrel/HttpServer.src/M000028.html +16 -9
- data/doc/rdoc/classes/Mongrel/HttpServer.src/M000029.html +49 -49
- data/doc/rdoc/classes/Mongrel/HttpServer.src/M000030.html +9 -9
- data/doc/rdoc/classes/Mongrel/HttpServer.src/M000031.html +4 -4
- data/doc/rdoc/classes/Mongrel/HttpServer.src/M000032.html +4 -4
- data/doc/rdoc/created.rid +1 -1
- data/doc/rdoc/files/README.html +7 -2
- data/doc/rdoc/files/lib/mongrel_rb.html +1 -1
- data/doc/rdoc/fr_method_index.html +15 -15
- data/lib/mongrel.rb +17 -8
- metadata +4 -5
- data/doc/rdoc/classes/Mongrel.src/M000015.html +0 -18
data/README
CHANGED
@@ -11,7 +11,7 @@ scream without too many portability issues.
|
|
11
11
|
|
12
12
|
== Status
|
13
13
|
|
14
|
-
The 0.3.
|
14
|
+
The 0.3.2 release supports Ruby On Rails much better than previously, and also
|
15
15
|
sports the beginning of a command and plugin infrastructure. This last part
|
16
16
|
isn't documented yet.
|
17
17
|
|
@@ -37,6 +37,9 @@ And you can stop it whenever you like with:
|
|
37
37
|
All of which should be done from your application's directory. It writes the
|
38
38
|
PID of the process you ran into log/mongrel.pid.
|
39
39
|
|
40
|
+
There are also many more new options for configuring the rails runner including
|
41
|
+
changing to a different directory, adding more MIME types, and setting processor
|
42
|
+
threads and timeouts.
|
40
43
|
|
41
44
|
== Install
|
42
45
|
|
data/Rakefile
CHANGED
@@ -31,6 +31,6 @@ setup_extension("http11", "http11")
|
|
31
31
|
|
32
32
|
summary = "A small fast HTTP library and server that runs Rails, Camping, and Nitro apps."
|
33
33
|
test_file = "test/test_ws.rb"
|
34
|
-
setup_gem("mongrel", "0.3.
|
34
|
+
setup_gem("mongrel", "0.3.2", "Zed A. Shaw", summary, ['mongrel_rails'], test_file) do |spec|
|
35
35
|
spec.add_dependency('daemons', '>= 0.4.2')
|
36
36
|
end
|
data/bin/mongrel_rails
CHANGED
@@ -51,9 +51,13 @@ end
|
|
51
51
|
|
52
52
|
|
53
53
|
class RailsHandler < Mongrel::HttpHandler
|
54
|
-
|
54
|
+
|
55
|
+
def initialize(dir, mime_map = {})
|
55
56
|
@files = Mongrel::DirHandler.new(dir,false)
|
56
57
|
@guard = Mutex.new
|
58
|
+
|
59
|
+
# register the requested mime types
|
60
|
+
mime_map.each {|k,v| Mongrel::DirHandler::add_mime_type(k,v) }
|
57
61
|
end
|
58
62
|
|
59
63
|
def process(request, response)
|
@@ -88,50 +92,94 @@ class StartCommand < Mongrel::Command::Command
|
|
88
92
|
|
89
93
|
def configure
|
90
94
|
options [
|
91
|
-
|
92
|
-
|
93
|
-
|
94
|
-
|
95
|
-
|
96
|
-
|
95
|
+
["-e", "--environment ENV", "Rails environment to run as", :@environment, ENV['RAILS_ENV'] || "development"],
|
96
|
+
["-d", "--daemonize", "Whether to run in the background or not", :@daemon, false],
|
97
|
+
['-p', '--port PORT', "Which port to bind to", :@port, 3000],
|
98
|
+
['-a', '--address ADDR', "Address to bind to", :@address, "0.0.0.0"],
|
99
|
+
['-l', '--log FILE', "Where to write log messages", :@log_file, "log/mongrel.log"],
|
100
|
+
['-P', '--pid FILE', "Where to write the PID", :@pid_file, "log/mongrel.pid"],
|
101
|
+
['-n', '--num-procs INT', "Number of processor threads to use", :@num_procs, 20],
|
102
|
+
['-t', '--timeout SECONDS', "Timeout all requests after SECONDS time", :@timeout, 120],
|
103
|
+
['-m', '--mime PATH', "A YAML file that lists additional MIME types", :@mime_map, nil],
|
104
|
+
['-c', '--chdir PATH', "Change to dir before starting (will be expanded)", :@cwd, Dir.pwd],
|
105
|
+
['-r', '--root PATH', "Set the document root (default 'public')", :@docroot, "public"],
|
97
106
|
]
|
98
107
|
end
|
99
108
|
|
100
109
|
def validate
|
101
|
-
|
110
|
+
@cwd = File.expand_path(@cwd)
|
111
|
+
valid_dir? @cwd, "Invalid path to change to during daemon mode: #@cwd"
|
112
|
+
|
113
|
+
# change there to start, then we'll have to come back after daemonize
|
114
|
+
Dir.chdir(@cwd)
|
115
|
+
|
102
116
|
valid_dir? File.dirname(@log_file), "Path to log file not valid: #@log_file"
|
103
117
|
valid_dir? File.dirname(@pid_file), "Path to pid file not valid: #@pid_file"
|
104
|
-
|
118
|
+
valid_dir? @docroot, "Path to docroot not valid: #@docroot"
|
119
|
+
valid_exists? @mime_map, "MIME mapping file does not exist: #@mime_map" if @mime_map
|
120
|
+
|
105
121
|
return @valid
|
106
122
|
end
|
107
123
|
|
108
|
-
|
109
|
-
|
110
|
-
cwd = Dir.pwd
|
111
|
-
|
124
|
+
def daemonize
|
125
|
+
# save this for later since daemonize will hose it
|
112
126
|
if @daemon
|
113
|
-
puts "
|
127
|
+
puts "Started Mongrel server in #@environment mode at #@address:#@port"
|
114
128
|
Daemonize.daemonize(log_file=@log_file)
|
115
|
-
|
129
|
+
|
116
130
|
# change back to the original starting directory
|
117
|
-
Dir.chdir(cwd)
|
131
|
+
Dir.chdir(@cwd)
|
132
|
+
|
133
|
+
open(@pid_file,"w") {|f| f.write(Process.pid) }
|
118
134
|
else
|
119
|
-
puts "Running at #@address:#@port"
|
135
|
+
puts "Running Mongrel server in #@environment mode at #@address:#@port"
|
120
136
|
end
|
137
|
+
end
|
121
138
|
|
122
|
-
|
139
|
+
def load_mime_map
|
140
|
+
mime = {}
|
141
|
+
|
142
|
+
# configure any requested mime map
|
143
|
+
if @mime_map
|
144
|
+
puts "Loading additional MIME types from #@mime_map"
|
145
|
+
mime.merge!(YAML.load_file(@mime_map))
|
123
146
|
|
147
|
+
# check all the mime types to make sure they are the right format
|
148
|
+
mime.each {|k,v| puts "WARNING: MIME type #{k} must start with '.'" if k.index(".") != 0 }
|
149
|
+
end
|
150
|
+
|
151
|
+
return mime
|
152
|
+
end
|
153
|
+
|
154
|
+
def configure_rails
|
155
|
+
ENV['RAILS_ENV'] = @environment
|
124
156
|
require 'config/environment'
|
125
|
-
|
126
|
-
|
127
|
-
|
157
|
+
|
158
|
+
# configure the rails handler
|
159
|
+
rails = RailsHandler.new(@docroot, load_mime_map)
|
160
|
+
|
161
|
+
return rails
|
162
|
+
end
|
163
|
+
|
164
|
+
def start_mongrel(rails)
|
165
|
+
# start up mongrel with the right configurations
|
166
|
+
server = Mongrel::HttpServer.new(@address, @port, @num_procs.to_i, @timeout.to_i)
|
167
|
+
server.register("/", rails)
|
168
|
+
server.run
|
128
169
|
|
129
170
|
begin
|
130
|
-
|
171
|
+
puts "Server ready."
|
172
|
+
server.acceptor.join
|
131
173
|
rescue Interrupt
|
132
174
|
puts "Interrupted."
|
133
175
|
end
|
134
176
|
end
|
177
|
+
|
178
|
+
def run
|
179
|
+
daemonize
|
180
|
+
rails = configure_rails
|
181
|
+
start_mongrel(rails)
|
182
|
+
end
|
135
183
|
end
|
136
184
|
|
137
185
|
|
@@ -140,13 +188,18 @@ class StopCommand < Mongrel::Command::Command
|
|
140
188
|
|
141
189
|
def configure
|
142
190
|
options [
|
143
|
-
|
144
|
-
|
191
|
+
['-c', '--chdir PATH', "Change to dir before starting (will be expanded)", :@cwd, Dir.pwd],
|
192
|
+
['-P', '--pid FILE', "Where to write the PID", :@pid_file, "log/mongrel.pid"]
|
145
193
|
]
|
146
194
|
end
|
147
195
|
|
148
196
|
def validate
|
197
|
+
@cwd = File.expand_path(@cwd)
|
198
|
+
valid_dir? @cwd, "Invalid path to change to during daemon mode: #@cwd"
|
199
|
+
|
200
|
+
@pid_file = File.join(@cwd,@pid_file)
|
149
201
|
valid_exists? @pid_file, "PID file #@pid_file does not exist. Not running?"
|
202
|
+
|
150
203
|
return @valid
|
151
204
|
end
|
152
205
|
|
@@ -89,13 +89,6 @@ 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="#M000015">add_mime_type</a>
|
97
|
-
</div>
|
98
|
-
</div>
|
99
92
|
|
100
93
|
</div>
|
101
94
|
|
@@ -148,29 +141,6 @@ href="Mongrel/Const.html">Mongrel::Const</a>.
|
|
148
141
|
|
149
142
|
|
150
143
|
<!-- if method_list -->
|
151
|
-
<div id="methods">
|
152
|
-
<h3 class="section-bar">Public Instance methods</h3>
|
153
|
-
|
154
|
-
<div id="method-M000015" class="method-detail">
|
155
|
-
<a name="M000015"></a>
|
156
|
-
|
157
|
-
<div class="method-heading">
|
158
|
-
<a href="Mongrel.src/M000015.html" target="Code" class="method-signature"
|
159
|
-
onclick="popupCode('Mongrel.src/M000015.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>
|
174
144
|
|
175
145
|
|
176
146
|
</div>
|
@@ -103,11 +103,12 @@ 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="#M000023">
|
108
|
-
<a href="#
|
109
|
-
<a href="#
|
110
|
-
<a href="#
|
106
|
+
<a href="#M000027">add_mime_type</a>
|
107
|
+
<a href="#M000023">can_serve</a>
|
108
|
+
<a href="#M000022">new</a>
|
109
|
+
<a href="#M000026">process</a>
|
110
|
+
<a href="#M000024">send_dir_listing</a>
|
111
|
+
<a href="#M000025">send_file</a>
|
111
112
|
</div>
|
112
113
|
</div>
|
113
114
|
|
@@ -155,12 +156,30 @@ than it simply gives a 404.
|
|
155
156
|
<div id="methods">
|
156
157
|
<h3 class="section-bar">Public Class methods</h3>
|
157
158
|
|
158
|
-
<div id="method-
|
159
|
-
<a name="
|
159
|
+
<div id="method-M000027" class="method-detail">
|
160
|
+
<a name="M000027"></a>
|
160
161
|
|
161
162
|
<div class="method-heading">
|
162
|
-
<a href="DirHandler.src/
|
163
|
-
onclick="popupCode('DirHandler.src/
|
163
|
+
<a href="DirHandler.src/M000027.html" target="Code" class="method-signature"
|
164
|
+
onclick="popupCode('DirHandler.src/M000027.html');return false;">
|
165
|
+
<span class="method-name">add_mime_type</span><span class="method-args">(extension, type)</span>
|
166
|
+
</a>
|
167
|
+
</div>
|
168
|
+
|
169
|
+
<div class="method-description">
|
170
|
+
<p>
|
171
|
+
There is a small number of default mime types for extensions, but this lets
|
172
|
+
you add any others you’ll need when serving content.
|
173
|
+
</p>
|
174
|
+
</div>
|
175
|
+
</div>
|
176
|
+
|
177
|
+
<div id="method-M000022" class="method-detail">
|
178
|
+
<a name="M000022"></a>
|
179
|
+
|
180
|
+
<div class="method-heading">
|
181
|
+
<a href="DirHandler.src/M000022.html" target="Code" class="method-signature"
|
182
|
+
onclick="popupCode('DirHandler.src/M000022.html');return false;">
|
164
183
|
<span class="method-name">new</span><span class="method-args">(path, listing_allowed=true, index_html="index.html")</span>
|
165
184
|
</a>
|
166
185
|
</div>
|
@@ -174,12 +193,12 @@ You give it the path to the directory root and an (optional)
|
|
174
193
|
|
175
194
|
<h3 class="section-bar">Public Instance methods</h3>
|
176
195
|
|
177
|
-
<div id="method-
|
178
|
-
<a name="
|
196
|
+
<div id="method-M000023" class="method-detail">
|
197
|
+
<a name="M000023"></a>
|
179
198
|
|
180
199
|
<div class="method-heading">
|
181
|
-
<a href="DirHandler.src/
|
182
|
-
onclick="popupCode('DirHandler.src/
|
200
|
+
<a href="DirHandler.src/M000023.html" target="Code" class="method-signature"
|
201
|
+
onclick="popupCode('DirHandler.src/M000023.html');return false;">
|
183
202
|
<span class="method-name">can_serve</span><span class="method-args">(path_info)</span>
|
184
203
|
</a>
|
185
204
|
</div>
|
@@ -192,12 +211,12 @@ not).
|
|
192
211
|
</div>
|
193
212
|
</div>
|
194
213
|
|
195
|
-
<div id="method-
|
196
|
-
<a name="
|
214
|
+
<div id="method-M000026" class="method-detail">
|
215
|
+
<a name="M000026"></a>
|
197
216
|
|
198
217
|
<div class="method-heading">
|
199
|
-
<a href="DirHandler.src/
|
200
|
-
onclick="popupCode('DirHandler.src/
|
218
|
+
<a href="DirHandler.src/M000026.html" target="Code" class="method-signature"
|
219
|
+
onclick="popupCode('DirHandler.src/M000026.html');return false;">
|
201
220
|
<span class="method-name">process</span><span class="method-args">(request, response)</span>
|
202
221
|
</a>
|
203
222
|
</div>
|
@@ -210,12 +229,12 @@ allowed (based on the listing_allowed paramter to the constructor).
|
|
210
229
|
</div>
|
211
230
|
</div>
|
212
231
|
|
213
|
-
<div id="method-
|
214
|
-
<a name="
|
232
|
+
<div id="method-M000024" class="method-detail">
|
233
|
+
<a name="M000024"></a>
|
215
234
|
|
216
235
|
<div class="method-heading">
|
217
|
-
<a href="DirHandler.src/
|
218
|
-
onclick="popupCode('DirHandler.src/
|
236
|
+
<a href="DirHandler.src/M000024.html" target="Code" class="method-signature"
|
237
|
+
onclick="popupCode('DirHandler.src/M000024.html');return false;">
|
219
238
|
<span class="method-name">send_dir_listing</span><span class="method-args">(base, dir, response)</span>
|
220
239
|
</a>
|
221
240
|
</div>
|
@@ -225,18 +244,18 @@ allowed (based on the listing_allowed paramter to the constructor).
|
|
225
244
|
Returns a simplistic directory listing if they’re enabled, otherwise
|
226
245
|
a 403. Base is the base URI from the REQUEST_URI, dir is the directory to
|
227
246
|
serve on the file system (comes from <a
|
228
|
-
href="DirHandler.html#
|
247
|
+
href="DirHandler.html#M000023">can_serve</a>()), and response is the <a
|
229
248
|
href="HttpResponse.html">HttpResponse</a> object to send the results on.
|
230
249
|
</p>
|
231
250
|
</div>
|
232
251
|
</div>
|
233
252
|
|
234
|
-
<div id="method-
|
235
|
-
<a name="
|
253
|
+
<div id="method-M000025" class="method-detail">
|
254
|
+
<a name="M000025"></a>
|
236
255
|
|
237
256
|
<div class="method-heading">
|
238
|
-
<a href="DirHandler.src/
|
239
|
-
onclick="popupCode('DirHandler.src/
|
257
|
+
<a href="DirHandler.src/M000025.html" target="Code" class="method-signature"
|
258
|
+
onclick="popupCode('DirHandler.src/M000025.html');return false;">
|
240
259
|
<span class="method-name">send_file</span><span class="method-args">(req, response)</span>
|
241
260
|
</a>
|
242
261
|
</div>
|
@@ -0,0 +1,20 @@
|
|
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>new (Mongrel::DirHandler)</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 470</span>
|
14
|
+
470: <span class="ruby-keyword kw">def</span> <span class="ruby-identifier">initialize</span>(<span class="ruby-identifier">path</span>, <span class="ruby-identifier">listing_allowed</span>=<span class="ruby-keyword kw">true</span>, <span class="ruby-identifier">index_html</span>=<span class="ruby-value str">"index.html"</span>)
|
15
|
+
471: <span class="ruby-ivar">@path</span> = <span class="ruby-constant">File</span>.<span class="ruby-identifier">expand_path</span>(<span class="ruby-identifier">path</span>)
|
16
|
+
472: <span class="ruby-ivar">@listing_allowed</span>=<span class="ruby-identifier">listing_allowed</span>
|
17
|
+
473: <span class="ruby-ivar">@index_html</span> = <span class="ruby-identifier">index_html</span>
|
18
|
+
474: <span class="ruby-keyword kw">end</span></pre>
|
19
|
+
</body>
|
20
|
+
</html>
|
@@ -5,16 +5,38 @@
|
|
5
5
|
|
6
6
|
<html>
|
7
7
|
<head>
|
8
|
-
<title>
|
8
|
+
<title>can_serve (Mongrel::DirHandler)</title>
|
9
9
|
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" />
|
10
10
|
<link rel="stylesheet" href="../../.././rdoc-style.css" type="text/css" media="screen" />
|
11
11
|
</head>
|
12
12
|
<body class="standalone-code">
|
13
|
-
<pre> <span class="ruby-comment cmt"># File lib/mongrel.rb, line
|
14
|
-
|
15
|
-
|
16
|
-
|
17
|
-
|
18
|
-
|
13
|
+
<pre> <span class="ruby-comment cmt"># File lib/mongrel.rb, line 477</span>
|
14
|
+
477: <span class="ruby-keyword kw">def</span> <span class="ruby-identifier">can_serve</span>(<span class="ruby-identifier">path_info</span>)
|
15
|
+
478: <span class="ruby-identifier">req</span> = <span class="ruby-constant">File</span>.<span class="ruby-identifier">expand_path</span>(<span class="ruby-constant">File</span>.<span class="ruby-identifier">join</span>(<span class="ruby-ivar">@path</span>,<span class="ruby-identifier">path_info</span>), <span class="ruby-ivar">@path</span>)
|
16
|
+
479:
|
17
|
+
480: <span class="ruby-keyword kw">if</span> <span class="ruby-identifier">req</span>.<span class="ruby-identifier">index</span>(<span class="ruby-ivar">@path</span>) <span class="ruby-operator">==</span> <span class="ruby-value">0</span> <span class="ruby-keyword kw">and</span> <span class="ruby-constant">File</span>.<span class="ruby-identifier">exist?</span> <span class="ruby-identifier">req</span>
|
18
|
+
481: <span class="ruby-comment cmt"># it exists and it's in the right location</span>
|
19
|
+
482: <span class="ruby-keyword kw">if</span> <span class="ruby-constant">File</span>.<span class="ruby-identifier">directory?</span> <span class="ruby-identifier">req</span>
|
20
|
+
483: <span class="ruby-comment cmt"># the request is for a directory</span>
|
21
|
+
484: <span class="ruby-identifier">index</span> = <span class="ruby-constant">File</span>.<span class="ruby-identifier">join</span>(<span class="ruby-identifier">req</span>, <span class="ruby-ivar">@index_html</span>)
|
22
|
+
485: <span class="ruby-keyword kw">if</span> <span class="ruby-constant">File</span>.<span class="ruby-identifier">exist?</span> <span class="ruby-identifier">index</span>
|
23
|
+
486: <span class="ruby-comment cmt"># serve the index</span>
|
24
|
+
487: <span class="ruby-keyword kw">return</span> <span class="ruby-identifier">index</span>
|
25
|
+
488: <span class="ruby-keyword kw">elsif</span> <span class="ruby-ivar">@listing_allows</span>
|
26
|
+
489: <span class="ruby-comment cmt"># serve the directory</span>
|
27
|
+
490: <span class="ruby-identifier">req</span>
|
28
|
+
491: <span class="ruby-keyword kw">else</span>
|
29
|
+
492: <span class="ruby-comment cmt"># do not serve anything</span>
|
30
|
+
493: <span class="ruby-keyword kw">return</span> <span class="ruby-keyword kw">nil</span>
|
31
|
+
494: <span class="ruby-keyword kw">end</span>
|
32
|
+
495: <span class="ruby-keyword kw">else</span>
|
33
|
+
496: <span class="ruby-comment cmt"># it's a file and it's there</span>
|
34
|
+
497: <span class="ruby-keyword kw">return</span> <span class="ruby-identifier">req</span>
|
35
|
+
498: <span class="ruby-keyword kw">end</span>
|
36
|
+
499: <span class="ruby-keyword kw">else</span>
|
37
|
+
500: <span class="ruby-comment cmt"># does not exist or isn't in the right spot</span>
|
38
|
+
501: <span class="ruby-keyword kw">return</span> <span class="ruby-keyword kw">nil</span>
|
39
|
+
502: <span class="ruby-keyword kw">end</span>
|
40
|
+
503: <span class="ruby-keyword kw">end</span></pre>
|
19
41
|
</body>
|
20
42
|
</html>
|
@@ -5,38 +5,36 @@
|
|
5
5
|
|
6
6
|
<html>
|
7
7
|
<head>
|
8
|
-
<title>
|
8
|
+
<title>send_dir_listing (Mongrel::DirHandler)</title>
|
9
9
|
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" />
|
10
10
|
<link rel="stylesheet" href="../../.././rdoc-style.css" type="text/css" media="screen" />
|
11
11
|
</head>
|
12
12
|
<body class="standalone-code">
|
13
|
-
<pre> <span class="ruby-comment cmt"># File lib/mongrel.rb, line
|
14
|
-
|
15
|
-
|
16
|
-
|
17
|
-
|
18
|
-
|
19
|
-
|
20
|
-
|
21
|
-
|
22
|
-
|
23
|
-
|
24
|
-
|
25
|
-
|
26
|
-
|
27
|
-
|
28
|
-
|
29
|
-
|
30
|
-
|
31
|
-
|
32
|
-
|
33
|
-
|
34
|
-
|
35
|
-
|
36
|
-
|
37
|
-
|
38
|
-
|
39
|
-
495: <span class="ruby-keyword kw">end</span>
|
40
|
-
496: <span class="ruby-keyword kw">end</span></pre>
|
13
|
+
<pre> <span class="ruby-comment cmt"># File lib/mongrel.rb, line 510</span>
|
14
|
+
510: <span class="ruby-keyword kw">def</span> <span class="ruby-identifier">send_dir_listing</span>(<span class="ruby-identifier">base</span>, <span class="ruby-identifier">dir</span>, <span class="ruby-identifier">response</span>)
|
15
|
+
511: <span class="ruby-comment cmt"># take off any trailing / so the links come out right</span>
|
16
|
+
512: <span class="ruby-identifier">base</span>.<span class="ruby-identifier">chop!</span> <span class="ruby-keyword kw">if</span> <span class="ruby-identifier">base</span>[<span class="ruby-value">-1</span>] <span class="ruby-operator">==</span> <span class="ruby-value str">"/"</span>[<span class="ruby-value">-1</span>]
|
17
|
+
513:
|
18
|
+
514: <span class="ruby-keyword kw">if</span> <span class="ruby-ivar">@listing_allowed</span>
|
19
|
+
515: <span class="ruby-identifier">response</span>.<span class="ruby-identifier">start</span>(<span class="ruby-value">200</span>) <span class="ruby-keyword kw">do</span> <span class="ruby-operator">|</span><span class="ruby-identifier">head</span>,<span class="ruby-identifier">out</span><span class="ruby-operator">|</span>
|
20
|
+
516: <span class="ruby-identifier">head</span>[<span class="ruby-value str">'Content-Type'</span>] = <span class="ruby-value str">"text/html"</span>
|
21
|
+
517: <span class="ruby-identifier">out</span> <span class="ruby-operator"><<</span> <span class="ruby-value str">"<html><head><title>Directory Listing</title></head><body>"</span>
|
22
|
+
518: <span class="ruby-constant">Dir</span>.<span class="ruby-identifier">entries</span>(<span class="ruby-identifier">dir</span>).<span class="ruby-identifier">each</span> <span class="ruby-keyword kw">do</span> <span class="ruby-operator">|</span><span class="ruby-identifier">child</span><span class="ruby-operator">|</span>
|
23
|
+
519: <span class="ruby-keyword kw">next</span> <span class="ruby-keyword kw">if</span> <span class="ruby-identifier">child</span> <span class="ruby-operator">==</span> <span class="ruby-value str">"."</span>
|
24
|
+
520:
|
25
|
+
521: <span class="ruby-keyword kw">if</span> <span class="ruby-identifier">child</span> <span class="ruby-operator">==</span> <span class="ruby-value str">".."</span>
|
26
|
+
522: <span class="ruby-identifier">out</span> <span class="ruby-operator"><<</span> <span class="ruby-node">"<a href=\"#{base}/#{child}\">Up to parent..</a><br/>"</span>
|
27
|
+
523: <span class="ruby-keyword kw">else</span>
|
28
|
+
524: <span class="ruby-identifier">out</span> <span class="ruby-operator"><<</span> <span class="ruby-node">"<a href=\"#{base}/#{child}\">#{child}</a><br/>"</span>
|
29
|
+
525: <span class="ruby-keyword kw">end</span>
|
30
|
+
526: <span class="ruby-keyword kw">end</span>
|
31
|
+
527: <span class="ruby-identifier">out</span> <span class="ruby-operator"><<</span> <span class="ruby-value str">"</body></html>"</span>
|
32
|
+
528: <span class="ruby-keyword kw">end</span>
|
33
|
+
529: <span class="ruby-keyword kw">else</span>
|
34
|
+
530: <span class="ruby-identifier">response</span>.<span class="ruby-identifier">start</span>(<span class="ruby-value">403</span>) <span class="ruby-keyword kw">do</span> <span class="ruby-operator">|</span><span class="ruby-identifier">head</span>,<span class="ruby-identifier">out</span><span class="ruby-operator">|</span>
|
35
|
+
531: <span class="ruby-identifier">out</span>.<span class="ruby-identifier">write</span>(<span class="ruby-value str">"Directory listings not allowed"</span>)
|
36
|
+
532: <span class="ruby-keyword kw">end</span>
|
37
|
+
533: <span class="ruby-keyword kw">end</span>
|
38
|
+
534: <span class="ruby-keyword kw">end</span></pre>
|
41
39
|
</body>
|
42
40
|
</html>
|