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
@@ -5,37 +5,23 @@
|
|
5
5
|
|
6
6
|
<html>
|
7
7
|
<head>
|
8
|
-
<title>
|
8
|
+
<title>error? (Mongrel::HttpParser)</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
13
|
<pre>/**
|
14
14
|
* call-seq:
|
15
|
-
* parser.
|
15
|
+
* parser.error? -> true/false
|
16
16
|
*
|
17
|
-
*
|
18
|
-
* returning an Integer to indicate how much of the data has been read. No matter
|
19
|
-
* what the return value, you should call HttpParser#finished? and HttpParser#error?
|
20
|
-
* to figure out if it's done parsing or there was an error.
|
21
|
-
*
|
22
|
-
* This function now throws an exception when there is a parsing error. This makes
|
23
|
-
* the logic for working with the parser much easier. You can still test for an
|
24
|
-
* error, but now you need to wrap the parser with an exception handling block.
|
17
|
+
* Tells you whether the parser is in an error state.
|
25
18
|
*/
|
26
|
-
VALUE
|
19
|
+
VALUE HttpParser_has_error(VALUE self)
|
27
20
|
{
|
28
21
|
http_parser *http = NULL;
|
29
22
|
DATA_GET(self, http_parser, http);
|
30
|
-
|
31
|
-
http
|
32
|
-
http_parser_execute(http, RSTRING(data)->ptr, RSTRING(data)->len);
|
33
|
-
|
34
|
-
if(http_parser_has_error(http)) {
|
35
|
-
rb_raise(rb_eStandardError, "HTTP Parsing failure");
|
36
|
-
} else {
|
37
|
-
return INT2FIX(http_parser_nread(http));
|
38
|
-
}
|
23
|
+
|
24
|
+
return http_parser_has_error(http) ? Qtrue : Qfalse;
|
39
25
|
}</pre>
|
40
26
|
</body>
|
41
27
|
</html>
|
@@ -5,23 +5,23 @@
|
|
5
5
|
|
6
6
|
<html>
|
7
7
|
<head>
|
8
|
-
<title>
|
8
|
+
<title>finished? (Mongrel::HttpParser)</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
13
|
<pre>/**
|
14
14
|
* call-seq:
|
15
|
-
* parser.
|
15
|
+
* parser.finished? -> true/false
|
16
16
|
*
|
17
|
-
* Tells you whether the parser is in
|
17
|
+
* Tells you whether the parser is finished or not and in a good state.
|
18
18
|
*/
|
19
|
-
VALUE
|
19
|
+
VALUE HttpParser_is_finished(VALUE self)
|
20
20
|
{
|
21
21
|
http_parser *http = NULL;
|
22
22
|
DATA_GET(self, http_parser, http);
|
23
23
|
|
24
|
-
return
|
24
|
+
return http_parser_is_finished(http) ? Qtrue : Qfalse;
|
25
25
|
}</pre>
|
26
26
|
</body>
|
27
27
|
</html>
|
@@ -5,23 +5,24 @@
|
|
5
5
|
|
6
6
|
<html>
|
7
7
|
<head>
|
8
|
-
<title>
|
8
|
+
<title>nread (Mongrel::HttpParser)</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
13
|
<pre>/**
|
14
14
|
* call-seq:
|
15
|
-
* parser.
|
15
|
+
* parser.nread -> Integer
|
16
16
|
*
|
17
|
-
*
|
17
|
+
* Returns the amount of data processed so far during this processing cycle. It is
|
18
|
+
* set to 0 on initialize or reset calls and is incremented each time execute is called.
|
18
19
|
*/
|
19
|
-
VALUE
|
20
|
+
VALUE HttpParser_nread(VALUE self)
|
20
21
|
{
|
21
22
|
http_parser *http = NULL;
|
22
23
|
DATA_GET(self, http_parser, http);
|
23
24
|
|
24
|
-
return
|
25
|
+
return INT2FIX(http->nread);
|
25
26
|
}</pre>
|
26
27
|
</body>
|
27
28
|
</html>
|
@@ -164,7 +164,7 @@ finally useful.
|
|
164
164
|
<div class="method-heading">
|
165
165
|
<a href="HttpServer.src/M000028.html" target="Code" class="method-signature"
|
166
166
|
onclick="popupCode('HttpServer.src/M000028.html');return false;">
|
167
|
-
<span class="method-name">new</span><span class="method-args">(host, port, num_processors=20)</span>
|
167
|
+
<span class="method-name">new</span><span class="method-args">(host, port, num_processors=20, timeout=120)</span>
|
168
168
|
</a>
|
169
169
|
</div>
|
170
170
|
|
@@ -11,7 +11,7 @@
|
|
11
11
|
</head>
|
12
12
|
<body class="standalone-code">
|
13
13
|
<pre> <span class="ruby-comment cmt"># File lib/mongrel.rb, line 317</span>
|
14
|
-
317: <span class="ruby-keyword kw">def</span> <span class="ruby-identifier">initialize</span>(<span class="ruby-identifier">host</span>, <span class="ruby-identifier">port</span>, <span class="ruby-identifier">num_processors</span>=<span class="ruby-value">20</span>)
|
14
|
+
317: <span class="ruby-keyword kw">def</span> <span class="ruby-identifier">initialize</span>(<span class="ruby-identifier">host</span>, <span class="ruby-identifier">port</span>, <span class="ruby-identifier">num_processors</span>=<span class="ruby-value">20</span>, <span class="ruby-identifier">timeout</span>=<span class="ruby-value">120</span>)
|
15
15
|
318: <span class="ruby-ivar">@socket</span> = <span class="ruby-constant">TCPServer</span>.<span class="ruby-identifier">new</span>(<span class="ruby-identifier">host</span>, <span class="ruby-identifier">port</span>)
|
16
16
|
319:
|
17
17
|
320: <span class="ruby-ivar">@classifier</span> = <span class="ruby-constant">URIClassifier</span>.<span class="ruby-identifier">new</span>
|
@@ -19,13 +19,20 @@
|
|
19
19
|
322: <span class="ruby-ivar">@host</span> = <span class="ruby-identifier">host</span>
|
20
20
|
323: <span class="ruby-ivar">@port</span> = <span class="ruby-identifier">port</span>
|
21
21
|
324: <span class="ruby-ivar">@num_processors</span> = <span class="ruby-identifier">num_processors</span>
|
22
|
-
325:
|
23
|
-
326:
|
24
|
-
327:
|
25
|
-
328:
|
26
|
-
329:
|
27
|
-
330:
|
28
|
-
331:
|
29
|
-
332:
|
22
|
+
325: <span class="ruby-ivar">@timeout</span> = <span class="ruby-identifier">timeout</span>
|
23
|
+
326:
|
24
|
+
327: <span class="ruby-ivar">@num_processors</span>.<span class="ruby-identifier">times</span> {<span class="ruby-operator">|</span><span class="ruby-identifier">i</span><span class="ruby-operator">|</span> <span class="ruby-constant">Thread</span>.<span class="ruby-identifier">new</span> <span class="ruby-keyword kw">do</span>
|
25
|
+
328: <span class="ruby-keyword kw">while</span> <span class="ruby-identifier">client</span> = <span class="ruby-ivar">@req_queue</span>.<span class="ruby-identifier">deq</span>
|
26
|
+
329: <span class="ruby-keyword kw">begin</span>
|
27
|
+
330: <span class="ruby-constant">Timeout</span>.<span class="ruby-identifier">timeout</span>(<span class="ruby-ivar">@timeout</span>) <span class="ruby-keyword kw">do</span>
|
28
|
+
331: <span class="ruby-identifier">process_client</span>(<span class="ruby-identifier">client</span>)
|
29
|
+
332: <span class="ruby-keyword kw">end</span>
|
30
|
+
333: <span class="ruby-keyword kw">rescue</span> <span class="ruby-constant">Timeout</span><span class="ruby-operator">::</span><span class="ruby-constant">Error</span>
|
31
|
+
334: <span class="ruby-constant">STDERR</span>.<span class="ruby-identifier">puts</span> <span class="ruby-value str">"WARNING: Request took longer than #@timeout second timeout"</span>
|
32
|
+
335: <span class="ruby-keyword kw">end</span>
|
33
|
+
336: <span class="ruby-keyword kw">end</span>
|
34
|
+
337: <span class="ruby-keyword kw">end</span>
|
35
|
+
338: }
|
36
|
+
339: <span class="ruby-keyword kw">end</span></pre>
|
30
37
|
</body>
|
31
38
|
</html>
|
@@ -10,55 +10,55 @@
|
|
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
|
-
360:
|
35
|
-
361: <span class="ruby-identifier">request</span> = <span class="ruby-constant">HttpRequest</span>.<span class="ruby-identifier">new</span>(<span class="ruby-identifier">params</span>, <span class="ruby-identifier">data</span>[<span class="ruby-identifier">nread</span> <span class="ruby-operator">...</span> <span class="ruby-identifier">data</span>.<span class="ruby-identifier">length</span>], <span class="ruby-identifier">client</span>)
|
36
|
-
362: <span class="ruby-identifier">response</span> = <span class="ruby-constant">HttpResponse</span>.<span class="ruby-identifier">new</span>(<span class="ruby-identifier">client</span>)
|
37
|
-
363: <span class="ruby-identifier">handler</span>.<span class="ruby-identifier">process</span>(<span class="ruby-identifier">request</span>, <span class="ruby-identifier">response</span>)
|
38
|
-
364: <span class="ruby-keyword kw">else</span>
|
39
|
-
365: <span class="ruby-identifier">client</span>.<span class="ruby-identifier">write</span>(<span class="ruby-constant">Const</span><span class="ruby-operator">::</span><span class="ruby-constant">ERROR_404_RESPONSE</span>)
|
40
|
-
366: <span class="ruby-keyword kw">end</span>
|
13
|
+
<pre> <span class="ruby-comment cmt"># File lib/mongrel.rb, line 347</span>
|
14
|
+
347: <span class="ruby-keyword kw">def</span> <span class="ruby-identifier">process_client</span>(<span class="ruby-identifier">client</span>)
|
15
|
+
348: <span class="ruby-keyword kw">begin</span>
|
16
|
+
349: <span class="ruby-identifier">parser</span> = <span class="ruby-constant">HttpParser</span>.<span class="ruby-identifier">new</span>
|
17
|
+
350: <span class="ruby-identifier">params</span> = {}
|
18
|
+
351: <span class="ruby-identifier">data</span> = <span class="ruby-identifier">client</span>.<span class="ruby-identifier">readpartial</span>(<span class="ruby-constant">Const</span><span class="ruby-operator">::</span><span class="ruby-constant">CHUNK_SIZE</span>)
|
19
|
+
352:
|
20
|
+
353: <span class="ruby-keyword kw">while</span> <span class="ruby-keyword kw">true</span>
|
21
|
+
354: <span class="ruby-identifier">nread</span> = <span class="ruby-identifier">parser</span>.<span class="ruby-identifier">execute</span>(<span class="ruby-identifier">params</span>, <span class="ruby-identifier">data</span>)
|
22
|
+
355: <span class="ruby-keyword kw">if</span> <span class="ruby-identifier">parser</span>.<span class="ruby-identifier">finished?</span>
|
23
|
+
356: <span class="ruby-identifier">script_name</span>, <span class="ruby-identifier">path_info</span>, <span class="ruby-identifier">handler</span> = <span class="ruby-ivar">@classifier</span>.<span class="ruby-identifier">resolve</span>(<span class="ruby-identifier">params</span>[<span class="ruby-constant">Const</span><span class="ruby-operator">::</span><span class="ruby-constant">REQUEST_URI</span>])
|
24
|
+
357:
|
25
|
+
358: <span class="ruby-keyword kw">if</span> <span class="ruby-identifier">handler</span>
|
26
|
+
359: <span class="ruby-identifier">params</span>[<span class="ruby-constant">Const</span><span class="ruby-operator">::</span><span class="ruby-constant">PATH_INFO</span>] = <span class="ruby-identifier">path_info</span>
|
27
|
+
360: <span class="ruby-identifier">params</span>[<span class="ruby-constant">Const</span><span class="ruby-operator">::</span><span class="ruby-constant">SCRIPT_NAME</span>] = <span class="ruby-identifier">script_name</span>
|
28
|
+
361: <span class="ruby-identifier">params</span>[<span class="ruby-constant">Const</span><span class="ruby-operator">::</span><span class="ruby-constant">GATEWAY_INTERFACE</span>]=<span class="ruby-constant">Const</span><span class="ruby-operator">::</span><span class="ruby-constant">GATEWAY_INTERFACE_VALUE</span>
|
29
|
+
362: <span class="ruby-identifier">params</span>[<span class="ruby-constant">Const</span><span class="ruby-operator">::</span><span class="ruby-constant">REMOTE_ADDR</span>]=<span class="ruby-identifier">client</span>.<span class="ruby-identifier">peeraddr</span>[<span class="ruby-value">3</span>]
|
30
|
+
363: <span class="ruby-identifier">params</span>[<span class="ruby-constant">Const</span><span class="ruby-operator">::</span><span class="ruby-constant">SERVER_NAME</span>]=<span class="ruby-ivar">@host</span>
|
31
|
+
364: <span class="ruby-identifier">params</span>[<span class="ruby-constant">Const</span><span class="ruby-operator">::</span><span class="ruby-constant">SERVER_PORT</span>]=<span class="ruby-ivar">@port</span>
|
32
|
+
365: <span class="ruby-identifier">params</span>[<span class="ruby-constant">Const</span><span class="ruby-operator">::</span><span class="ruby-constant">SERVER_PROTOCOL</span>]=<span class="ruby-constant">Const</span><span class="ruby-operator">::</span><span class="ruby-constant">SERVER_PROTOCOL_VALUE</span>
|
33
|
+
366: <span class="ruby-identifier">params</span>[<span class="ruby-constant">Const</span><span class="ruby-operator">::</span><span class="ruby-constant">SERVER_SOFTWARE</span>]=<span class="ruby-constant">Const</span><span class="ruby-operator">::</span><span class="ruby-constant">MONGREL_VERSION</span>
|
41
34
|
367:
|
42
|
-
368:
|
43
|
-
369:
|
44
|
-
370:
|
45
|
-
371: <span class="ruby-
|
46
|
-
372:
|
47
|
-
373: <span class="ruby-
|
48
|
-
374:
|
49
|
-
375:
|
50
|
-
376:
|
51
|
-
377:
|
52
|
-
378:
|
53
|
-
379:
|
54
|
-
380:
|
55
|
-
381:
|
56
|
-
382:
|
57
|
-
383:
|
58
|
-
384: <span class="ruby-
|
59
|
-
385: <span class="ruby-keyword kw">
|
60
|
-
386: <span class="ruby-
|
61
|
-
387: <span class="ruby-keyword kw">
|
62
|
-
388:
|
35
|
+
368: <span class="ruby-identifier">request</span> = <span class="ruby-constant">HttpRequest</span>.<span class="ruby-identifier">new</span>(<span class="ruby-identifier">params</span>, <span class="ruby-identifier">data</span>[<span class="ruby-identifier">nread</span> <span class="ruby-operator">...</span> <span class="ruby-identifier">data</span>.<span class="ruby-identifier">length</span>], <span class="ruby-identifier">client</span>)
|
36
|
+
369: <span class="ruby-identifier">response</span> = <span class="ruby-constant">HttpResponse</span>.<span class="ruby-identifier">new</span>(<span class="ruby-identifier">client</span>)
|
37
|
+
370: <span class="ruby-identifier">handler</span>.<span class="ruby-identifier">process</span>(<span class="ruby-identifier">request</span>, <span class="ruby-identifier">response</span>)
|
38
|
+
371: <span class="ruby-keyword kw">else</span>
|
39
|
+
372: <span class="ruby-identifier">client</span>.<span class="ruby-identifier">write</span>(<span class="ruby-constant">Const</span><span class="ruby-operator">::</span><span class="ruby-constant">ERROR_404_RESPONSE</span>)
|
40
|
+
373: <span class="ruby-keyword kw">end</span>
|
41
|
+
374:
|
42
|
+
375: <span class="ruby-keyword kw">break</span>
|
43
|
+
376: <span class="ruby-keyword kw">else</span>
|
44
|
+
377: <span class="ruby-comment cmt"># gotta stream and read again until we can get the parser to be character safe</span>
|
45
|
+
378: <span class="ruby-comment cmt"># TODO: make this more efficient since this means we're parsing a lot repeatedly</span>
|
46
|
+
379: <span class="ruby-identifier">parser</span>.<span class="ruby-identifier">reset</span>
|
47
|
+
380: <span class="ruby-identifier">data</span> <span class="ruby-operator"><<</span> <span class="ruby-identifier">client</span>.<span class="ruby-identifier">readpartial</span>(<span class="ruby-constant">Const</span><span class="ruby-operator">::</span><span class="ruby-constant">CHUNK_SIZE</span>)
|
48
|
+
381: <span class="ruby-keyword kw">end</span>
|
49
|
+
382: <span class="ruby-keyword kw">end</span>
|
50
|
+
383: <span class="ruby-keyword kw">rescue</span> <span class="ruby-constant">EOFError</span>
|
51
|
+
384: <span class="ruby-comment cmt"># ignored</span>
|
52
|
+
385: <span class="ruby-keyword kw">rescue</span> <span class="ruby-constant">Errno</span><span class="ruby-operator">::</span><span class="ruby-constant">ECONNRESET</span>
|
53
|
+
386: <span class="ruby-comment cmt"># ignored</span>
|
54
|
+
387: <span class="ruby-keyword kw">rescue</span> <span class="ruby-constant">Errno</span><span class="ruby-operator">::</span><span class="ruby-constant">EPIPE</span>
|
55
|
+
388: <span class="ruby-comment cmt"># ignored</span>
|
56
|
+
389: <span class="ruby-keyword kw">rescue</span> =<span class="ruby-operator">></span> <span class="ruby-identifier">details</span>
|
57
|
+
390: <span class="ruby-constant">STDERR</span>.<span class="ruby-identifier">puts</span> <span class="ruby-node">"ERROR(#{details.class}): #{details}"</span>
|
58
|
+
391: <span class="ruby-constant">STDERR</span>.<span class="ruby-identifier">puts</span> <span class="ruby-identifier">details</span>.<span class="ruby-identifier">backtrace</span>.<span class="ruby-identifier">join</span>(<span class="ruby-value str">"\n"</span>)
|
59
|
+
392: <span class="ruby-keyword kw">ensure</span>
|
60
|
+
393: <span class="ruby-identifier">client</span>.<span class="ruby-identifier">close</span>
|
61
|
+
394: <span class="ruby-keyword kw">end</span>
|
62
|
+
395: <span class="ruby-keyword kw">end</span></pre>
|
63
63
|
</body>
|
64
64
|
</html>
|
@@ -10,14 +10,14 @@
|
|
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
|
-
|
13
|
+
<pre> <span class="ruby-comment cmt"># File lib/mongrel.rb, line 399</span>
|
14
|
+
399: <span class="ruby-keyword kw">def</span> <span class="ruby-identifier">run</span>
|
15
|
+
400: <span class="ruby-constant">BasicSocket</span>.<span class="ruby-identifier">do_not_reverse_lookup</span>=<span class="ruby-keyword kw">true</span>
|
16
|
+
401: <span class="ruby-ivar">@acceptor</span> = <span class="ruby-constant">Thread</span>.<span class="ruby-identifier">new</span> <span class="ruby-keyword kw">do</span>
|
17
|
+
402: <span class="ruby-keyword kw">while</span> <span class="ruby-keyword kw">true</span>
|
18
|
+
403: <span class="ruby-ivar">@req_queue</span> <span class="ruby-operator"><<</span> <span class="ruby-ivar">@socket</span>.<span class="ruby-identifier">accept</span>
|
19
|
+
404: <span class="ruby-keyword kw">end</span>
|
20
|
+
405: <span class="ruby-keyword kw">end</span>
|
21
|
+
406: <span class="ruby-keyword kw">end</span></pre>
|
22
22
|
</body>
|
23
23
|
</html>
|
@@ -10,9 +10,9 @@
|
|
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
|
-
|
13
|
+
<pre> <span class="ruby-comment cmt"># File lib/mongrel.rb, line 412</span>
|
14
|
+
412: <span class="ruby-keyword kw">def</span> <span class="ruby-identifier">register</span>(<span class="ruby-identifier">uri</span>, <span class="ruby-identifier">handler</span>)
|
15
|
+
413: <span class="ruby-ivar">@classifier</span>.<span class="ruby-identifier">register</span>(<span class="ruby-identifier">uri</span>, <span class="ruby-identifier">handler</span>)
|
16
|
+
414: <span class="ruby-keyword kw">end</span></pre>
|
17
17
|
</body>
|
18
18
|
</html>
|
@@ -10,9 +10,9 @@
|
|
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
|
-
|
13
|
+
<pre> <span class="ruby-comment cmt"># File lib/mongrel.rb, line 418</span>
|
14
|
+
418: <span class="ruby-keyword kw">def</span> <span class="ruby-identifier">unregister</span>(<span class="ruby-identifier">uri</span>)
|
15
|
+
419: <span class="ruby-ivar">@classifier</span>.<span class="ruby-identifier">unregister</span>(<span class="ruby-identifier">uri</span>)
|
16
|
+
420: <span class="ruby-keyword kw">end</span></pre>
|
17
17
|
</body>
|
18
18
|
</html>
|
data/doc/rdoc/created.rid
CHANGED
@@ -1 +1 @@
|
|
1
|
-
|
1
|
+
Mon Feb 13 18:33:47 EST 2006
|
data/doc/rdoc/files/README.html
CHANGED
@@ -56,7 +56,7 @@
|
|
56
56
|
</tr>
|
57
57
|
<tr class="top-aligned-row">
|
58
58
|
<td><strong>Last Update:</strong></td>
|
59
|
-
<td>
|
59
|
+
<td>Mon Feb 13 18:33:41 EST 2006</td>
|
60
60
|
</tr>
|
61
61
|
</table>
|
62
62
|
</div>
|
@@ -84,7 +84,7 @@ portability issues.
|
|
84
84
|
</p>
|
85
85
|
<h2>Status</h2>
|
86
86
|
<p>
|
87
|
-
The 0.3.
|
87
|
+
The 0.3.2 release supports Ruby On Rails much better than previously, and
|
88
88
|
also sports the beginning of a command and plugin infrastructure. This last
|
89
89
|
part isn’t documented yet.
|
90
90
|
</p>
|
@@ -121,6 +121,11 @@ And you can stop it whenever you like with:
|
|
121
121
|
All of which should be done from your application’s directory. It
|
122
122
|
writes the PID of the process you ran into log/mongrel.pid.
|
123
123
|
</p>
|
124
|
+
<p>
|
125
|
+
There are also many more new options for configuring the rails runner
|
126
|
+
including changing to a different directory, adding more MIME types, and
|
127
|
+
setting processor threads and timeouts.
|
128
|
+
</p>
|
124
129
|
<h2>Install</h2>
|
125
130
|
<p>
|
126
131
|
It doesn’t explicitly require Camping, but if you want to run the
|
@@ -21,18 +21,18 @@
|
|
21
21
|
<h1 class="section-bar">Methods</h1>
|
22
22
|
<div id="index-entries">
|
23
23
|
<a href="classes/Mongrel/HeaderOut.html#M000034">[]= (Mongrel::HeaderOut)</a><br />
|
24
|
-
<a href="classes/Mongrel.html#
|
25
|
-
<a href="classes/Mongrel/DirHandler.html#
|
24
|
+
<a href="classes/Mongrel/DirHandler.html#M000027">add_mime_type (Mongrel::DirHandler)</a><br />
|
25
|
+
<a href="classes/Mongrel/DirHandler.html#M000023">can_serve (Mongrel::DirHandler)</a><br />
|
26
26
|
<a href="classes/PluginFactory.html#M000009">create (PluginFactory)</a><br />
|
27
27
|
<a href="classes/PluginFactory.html#M000008">derivativeClasses (PluginFactory)</a><br />
|
28
28
|
<a href="classes/PluginFactory.html#M000005">derivatives (PluginFactory)</a><br />
|
29
|
-
<a href="classes/Mongrel/HttpParser.html#
|
30
|
-
<a href="classes/Mongrel/HttpParser.html#
|
29
|
+
<a href="classes/Mongrel/HttpParser.html#M000019">error? (Mongrel::HttpParser)</a><br />
|
30
|
+
<a href="classes/Mongrel/HttpParser.html#M000018">execute (Mongrel::HttpParser)</a><br />
|
31
31
|
<a href="classes/PluginFactory.html#M000004">extend_object (PluginFactory)</a><br />
|
32
32
|
<a href="classes/PluginFactory.html#M000006">factoryType (PluginFactory)</a><br />
|
33
|
-
<a href="classes/Mongrel/HttpParser.html#
|
33
|
+
<a href="classes/Mongrel/HttpParser.html#M000017">finish (Mongrel::HttpParser)</a><br />
|
34
34
|
<a href="classes/Mongrel/HttpResponse.html#M000046">finished (Mongrel::HttpResponse)</a><br />
|
35
|
-
<a href="classes/Mongrel/HttpParser.html#
|
35
|
+
<a href="classes/Mongrel/HttpParser.html#M000020">finished? (Mongrel::HttpParser)</a><br />
|
36
36
|
<a href="classes/PluginFactory.html#M000012">getModuleName (PluginFactory)</a><br />
|
37
37
|
<a href="classes/PluginFactory.html#M000010">getSubclass (PluginFactory)</a><br />
|
38
38
|
<a href="classes/PluginFactory.html#M000003">included (PluginFactory)</a><br />
|
@@ -40,30 +40,30 @@
|
|
40
40
|
<a href="classes/PluginFactory.html#M000011">loadDerivative (PluginFactory)</a><br />
|
41
41
|
<a href="classes/PluginFactory.html#M000002">log (PluginFactory)</a><br />
|
42
42
|
<a href="classes/PluginFactory.html#M000014">makeRequirePath (PluginFactory)</a><br />
|
43
|
-
<a href="classes/
|
43
|
+
<a href="classes/Mongrel/HttpParser.html#M000015">new (Mongrel::HttpParser)</a><br />
|
44
|
+
<a href="classes/Mongrel/DirHandler.html#M000022">new (Mongrel::DirHandler)</a><br />
|
44
45
|
<a href="classes/Mongrel/HttpResponse.html#M000040">new (Mongrel::HttpResponse)</a><br />
|
45
|
-
<a href="classes/Mongrel/DirHandler.html#M000023">new (Mongrel::DirHandler)</a><br />
|
46
|
-
<a href="classes/Mongrel/HttpParser.html#M000016">new (Mongrel::HttpParser)</a><br />
|
47
|
-
<a href="classes/Mongrel/HeaderOut.html#M000033">new (Mongrel::HeaderOut)</a><br />
|
48
46
|
<a href="classes/Mongrel/URIClassifier.html#M000035">new (Mongrel::URIClassifier)</a><br />
|
47
|
+
<a href="classes/Mongrel/HeaderOut.html#M000033">new (Mongrel::HeaderOut)</a><br />
|
49
48
|
<a href="classes/Mongrel/Error404Handler.html#M000047">new (Mongrel::Error404Handler)</a><br />
|
49
|
+
<a href="classes/FactoryError.html#M000001">new (FactoryError)</a><br />
|
50
50
|
<a href="classes/Mongrel/HttpServer.html#M000028">new (Mongrel::HttpServer)</a><br />
|
51
51
|
<a href="classes/Mongrel/HttpRequest.html#M000049">new (Mongrel::HttpRequest)</a><br />
|
52
|
-
<a href="classes/Mongrel/HttpParser.html#
|
52
|
+
<a href="classes/Mongrel/HttpParser.html#M000021">nread (Mongrel::HttpParser)</a><br />
|
53
53
|
<a href="classes/Mongrel/Error404Handler.html#M000048">process (Mongrel::Error404Handler)</a><br />
|
54
54
|
<a href="classes/Mongrel/HttpHandler.html#M000039">process (Mongrel::HttpHandler)</a><br />
|
55
|
-
<a href="classes/Mongrel/DirHandler.html#
|
55
|
+
<a href="classes/Mongrel/DirHandler.html#M000026">process (Mongrel::DirHandler)</a><br />
|
56
56
|
<a href="classes/Mongrel/HttpServer.html#M000029">process_client (Mongrel::HttpServer)</a><br />
|
57
57
|
<a href="classes/Mongrel/HttpServer.html#M000031">register (Mongrel::HttpServer)</a><br />
|
58
58
|
<a href="classes/Mongrel/URIClassifier.html#M000036">register (Mongrel::URIClassifier)</a><br />
|
59
59
|
<a href="classes/PluginFactory.html#M000013">requireDerivative (PluginFactory)</a><br />
|
60
60
|
<a href="classes/Mongrel/HttpResponse.html#M000042">reset (Mongrel::HttpResponse)</a><br />
|
61
|
-
<a href="classes/Mongrel/HttpParser.html#
|
61
|
+
<a href="classes/Mongrel/HttpParser.html#M000016">reset (Mongrel::HttpParser)</a><br />
|
62
62
|
<a href="classes/Mongrel/URIClassifier.html#M000038">resolve (Mongrel::URIClassifier)</a><br />
|
63
63
|
<a href="classes/Mongrel/HttpServer.html#M000030">run (Mongrel::HttpServer)</a><br />
|
64
64
|
<a href="classes/Mongrel/HttpResponse.html#M000045">send_body (Mongrel::HttpResponse)</a><br />
|
65
|
-
<a href="classes/Mongrel/DirHandler.html#
|
66
|
-
<a href="classes/Mongrel/DirHandler.html#
|
65
|
+
<a href="classes/Mongrel/DirHandler.html#M000024">send_dir_listing (Mongrel::DirHandler)</a><br />
|
66
|
+
<a href="classes/Mongrel/DirHandler.html#M000025">send_file (Mongrel::DirHandler)</a><br />
|
67
67
|
<a href="classes/Mongrel/HttpResponse.html#M000044">send_header (Mongrel::HttpResponse)</a><br />
|
68
68
|
<a href="classes/Mongrel/HttpResponse.html#M000043">send_status (Mongrel::HttpResponse)</a><br />
|
69
69
|
<a href="classes/Mongrel/HttpResponse.html#M000041">start (Mongrel::HttpResponse)</a><br />
|
data/lib/mongrel.rb
CHANGED
@@ -314,7 +314,7 @@ module Mongrel
|
|
314
314
|
# try changing it higher. If you find that responses are way too slow
|
315
315
|
# try lowering it (after you've tuned your stuff of course).
|
316
316
|
# Future versions of Mongrel will make this more dynamic (hopefully).
|
317
|
-
def initialize(host, port, num_processors=20)
|
317
|
+
def initialize(host, port, num_processors=20, timeout=120)
|
318
318
|
@socket = TCPServer.new(host, port)
|
319
319
|
|
320
320
|
@classifier = URIClassifier.new
|
@@ -322,10 +322,17 @@ module Mongrel
|
|
322
322
|
@host = host
|
323
323
|
@port = port
|
324
324
|
@num_processors = num_processors
|
325
|
+
@timeout = timeout
|
325
326
|
|
326
327
|
@num_processors.times {|i| Thread.new do
|
327
328
|
while client = @req_queue.deq
|
328
|
-
|
329
|
+
begin
|
330
|
+
Timeout.timeout(@timeout) do
|
331
|
+
process_client(client)
|
332
|
+
end
|
333
|
+
rescue Timeout::Error
|
334
|
+
STDERR.puts "WARNING: Request took longer than #@timeout second timeout"
|
335
|
+
end
|
329
336
|
end
|
330
337
|
end
|
331
338
|
}
|
@@ -540,7 +547,7 @@ module Mongrel
|
|
540
547
|
end
|
541
548
|
end
|
542
549
|
|
543
|
-
open(req, "
|
550
|
+
open(req, "rb") do |f|
|
544
551
|
out.write(f.read)
|
545
552
|
end
|
546
553
|
end
|
@@ -572,12 +579,14 @@ module Mongrel
|
|
572
579
|
end
|
573
580
|
end
|
574
581
|
end
|
575
|
-
end
|
576
582
|
|
583
|
+
# There is a small number of default mime types for extensions, but
|
584
|
+
# this lets you add any others you'll need when serving content.
|
585
|
+
def DirHandler::add_mime_type(extension, type)
|
586
|
+
MIME_TYPES[extension] = type
|
587
|
+
end
|
577
588
|
|
578
|
-
# There is a small number of default mime types for extensions, but
|
579
|
-
# this lets you add any others you'll need when serving content.
|
580
|
-
def add_mime_type(extension, type)
|
581
|
-
MIME_TYPES[extension] = type
|
582
589
|
end
|
590
|
+
|
591
|
+
|
583
592
|
end
|