thin 0.5.3-x86-mswin32-60

Sign up to get free protection for your applications and to get access to all the features.

Potentially problematic release.


This version of thin might be problematic. Click here for more details.

Files changed (117) hide show
  1. data/CHANGELOG +40 -0
  2. data/COPYING +18 -0
  3. data/README +60 -0
  4. data/Rakefile +11 -0
  5. data/benchmark/simple.rb +48 -0
  6. data/bin/thin +123 -0
  7. data/doc/benchmarks.txt +86 -0
  8. data/doc/rdoc/classes/Process.html +181 -0
  9. data/doc/rdoc/classes/Rack.html +156 -0
  10. data/doc/rdoc/classes/Rack/Adapter.html +155 -0
  11. data/doc/rdoc/classes/Rack/Adapter/Rails.html +289 -0
  12. data/doc/rdoc/classes/Rack/Adapter/Rails/CGIWrapper.html +359 -0
  13. data/doc/rdoc/classes/Rack/Handler.html +155 -0
  14. data/doc/rdoc/classes/Rack/Handler/Thin.html +175 -0
  15. data/doc/rdoc/classes/Thin.html +164 -0
  16. data/doc/rdoc/classes/Thin/Cluster.html +399 -0
  17. data/doc/rdoc/classes/Thin/Connection.html +223 -0
  18. data/doc/rdoc/classes/Thin/Daemonizable.html +260 -0
  19. data/doc/rdoc/classes/Thin/Daemonizable/ClassMethods.html +197 -0
  20. data/doc/rdoc/classes/Thin/Headers.html +238 -0
  21. data/doc/rdoc/classes/Thin/InvalidRequest.html +144 -0
  22. data/doc/rdoc/classes/Thin/Logging.html +201 -0
  23. data/doc/rdoc/classes/Thin/Request.html +231 -0
  24. data/doc/rdoc/classes/Thin/Response.html +271 -0
  25. data/doc/rdoc/classes/Thin/Server.html +295 -0
  26. data/doc/rdoc/classes/Thin/StopServer.html +143 -0
  27. data/doc/rdoc/created.rid +1 -0
  28. data/doc/rdoc/files/README.html +226 -0
  29. data/doc/rdoc/files/bin/thin.html +245 -0
  30. data/doc/rdoc/files/lib/rack/adapter/rails_rb.html +146 -0
  31. data/doc/rdoc/files/lib/rack/handler/thin_rb.html +146 -0
  32. data/doc/rdoc/files/lib/thin/cluster_rb.html +146 -0
  33. data/doc/rdoc/files/lib/thin/connection_rb.html +145 -0
  34. data/doc/rdoc/files/lib/thin/daemonizing_rb.html +146 -0
  35. data/doc/rdoc/files/lib/thin/headers_rb.html +146 -0
  36. data/doc/rdoc/files/lib/thin/logging_rb.html +146 -0
  37. data/doc/rdoc/files/lib/thin/request_rb.html +145 -0
  38. data/doc/rdoc/files/lib/thin/response_rb.html +145 -0
  39. data/doc/rdoc/files/lib/thin/server_rb.html +145 -0
  40. data/doc/rdoc/files/lib/thin/statuses_rb.html +145 -0
  41. data/doc/rdoc/files/lib/thin/version_rb.html +145 -0
  42. data/doc/rdoc/files/lib/thin_rb.html +152 -0
  43. data/doc/rdoc/index.html +10 -0
  44. data/doc/rdoc/logo.gif +0 -0
  45. data/doc/rdoc/rdoc-style.css +55 -0
  46. data/example/config.ru +9 -0
  47. data/example/thin.god +72 -0
  48. data/ext/thin_parser/common.rl +54 -0
  49. data/ext/thin_parser/ext_help.h +14 -0
  50. data/ext/thin_parser/extconf.rb +6 -0
  51. data/ext/thin_parser/parser.c +1199 -0
  52. data/ext/thin_parser/parser.h +49 -0
  53. data/ext/thin_parser/parser.rl +143 -0
  54. data/ext/thin_parser/thin.c +424 -0
  55. data/lib/rack/adapter/rails.rb +155 -0
  56. data/lib/rack/handler/thin.rb +13 -0
  57. data/lib/thin.rb +36 -0
  58. data/lib/thin/cluster.rb +106 -0
  59. data/lib/thin/connection.rb +46 -0
  60. data/lib/thin/daemonizing.rb +112 -0
  61. data/lib/thin/headers.rb +37 -0
  62. data/lib/thin/logging.rb +23 -0
  63. data/lib/thin/request.rb +72 -0
  64. data/lib/thin/response.rb +48 -0
  65. data/lib/thin/server.rb +80 -0
  66. data/lib/thin/statuses.rb +43 -0
  67. data/lib/thin/version.rb +11 -0
  68. data/lib/thin_parser.so +0 -0
  69. data/spec/cluster_spec.rb +58 -0
  70. data/spec/daemonizing_spec.rb +93 -0
  71. data/spec/headers_spec.rb +35 -0
  72. data/spec/rack_rails_spec.rb +92 -0
  73. data/spec/rails_app/app/controllers/application.rb +10 -0
  74. data/spec/rails_app/app/controllers/simple_controller.rb +19 -0
  75. data/spec/rails_app/app/helpers/application_helper.rb +3 -0
  76. data/spec/rails_app/app/views/simple/index.html.erb +15 -0
  77. data/spec/rails_app/config/boot.rb +109 -0
  78. data/spec/rails_app/config/environment.rb +64 -0
  79. data/spec/rails_app/config/environments/development.rb +18 -0
  80. data/spec/rails_app/config/environments/production.rb +19 -0
  81. data/spec/rails_app/config/environments/test.rb +22 -0
  82. data/spec/rails_app/config/initializers/inflections.rb +10 -0
  83. data/spec/rails_app/config/initializers/mime_types.rb +5 -0
  84. data/spec/rails_app/config/routes.rb +35 -0
  85. data/spec/rails_app/public/404.html +30 -0
  86. data/spec/rails_app/public/422.html +30 -0
  87. data/spec/rails_app/public/500.html +30 -0
  88. data/spec/rails_app/public/dispatch.cgi +10 -0
  89. data/spec/rails_app/public/dispatch.fcgi +24 -0
  90. data/spec/rails_app/public/dispatch.rb +10 -0
  91. data/spec/rails_app/public/favicon.ico +0 -0
  92. data/spec/rails_app/public/images/rails.png +0 -0
  93. data/spec/rails_app/public/index.html +277 -0
  94. data/spec/rails_app/public/javascripts/application.js +2 -0
  95. data/spec/rails_app/public/javascripts/controls.js +963 -0
  96. data/spec/rails_app/public/javascripts/dragdrop.js +972 -0
  97. data/spec/rails_app/public/javascripts/effects.js +1120 -0
  98. data/spec/rails_app/public/javascripts/prototype.js +4225 -0
  99. data/spec/rails_app/public/robots.txt +5 -0
  100. data/spec/rails_app/script/about +3 -0
  101. data/spec/rails_app/script/console +3 -0
  102. data/spec/rails_app/script/destroy +3 -0
  103. data/spec/rails_app/script/generate +3 -0
  104. data/spec/rails_app/script/performance/benchmarker +3 -0
  105. data/spec/rails_app/script/performance/profiler +3 -0
  106. data/spec/rails_app/script/performance/request +3 -0
  107. data/spec/rails_app/script/plugin +3 -0
  108. data/spec/rails_app/script/process/inspector +3 -0
  109. data/spec/rails_app/script/process/reaper +3 -0
  110. data/spec/rails_app/script/process/spawner +3 -0
  111. data/spec/rails_app/script/runner +3 -0
  112. data/spec/rails_app/script/server +3 -0
  113. data/spec/request_spec.rb +258 -0
  114. data/spec/response_spec.rb +56 -0
  115. data/spec/server_spec.rb +75 -0
  116. data/spec/spec_helper.rb +127 -0
  117. metadata +219 -0
@@ -0,0 +1,223 @@
1
+
2
+ <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
3
+ <html>
4
+ <head>
5
+ <title>
6
+ thin &raquo; Class: Thin::Connection
7
+ </title>
8
+ <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" />
9
+ <link rel="stylesheet" href="../.././rdoc-style.css" type="text/css" media="screen" />
10
+ <script language="JavaScript" type="text/javascript">
11
+ // <![CDATA[
12
+
13
+ function toggleSource( id )
14
+ {
15
+ var elem
16
+ var link
17
+
18
+ if( document.getElementById )
19
+ {
20
+ elem = document.getElementById( id )
21
+ link = document.getElementById( "l_" + id )
22
+ }
23
+ else if ( document.all )
24
+ {
25
+ elem = eval( "document.all." + id )
26
+ link = eval( "document.all.l_" + id )
27
+ }
28
+ else
29
+ return false;
30
+
31
+ if( elem.style.display == "block" )
32
+ {
33
+ elem.style.display = "none"
34
+ link.innerHTML = "show source"
35
+ }
36
+ else
37
+ {
38
+ elem.style.display = "block"
39
+ link.innerHTML = "hide source"
40
+ }
41
+ }
42
+
43
+ function openCode( url )
44
+ {
45
+ window.open( url, "SOURCE_CODE", "width=400,height=400,scrollbars=yes" )
46
+ }
47
+ // ]]>
48
+ </script>
49
+ </head>
50
+ <body>
51
+ <ul id="menu">
52
+ <li><a href="/thin/">about</a></li>
53
+ <li><a href="/thin/download/">download</a></li>
54
+ <li><a href="/thin/usage/">usage</a></li>
55
+ <li><a href="/thin/doc/">doc</a></li>
56
+ <li><a href="http://groups.google.com/group/thin-ruby/">community</a></li>
57
+ </ul>
58
+ <div id="sidebar">
59
+ <h2>Files</h2>
60
+ <ul class="list">
61
+ <li><a href="../../files/README.html" value="File: README">README</a></li>
62
+ <li><a href="../../files/lib/rack/adapter/rails_rb.html" value="File: rails.rb">lib/rack/adapter/rails.rb</a></li>
63
+ <li><a href="../../files/lib/rack/handler/thin_rb.html" value="File: thin.rb">lib/rack/handler/thin.rb</a></li>
64
+ <li><a href="../../files/lib/thin/cluster_rb.html" value="File: cluster.rb">lib/thin/cluster.rb</a></li>
65
+ <li><a href="../../files/lib/thin/connection_rb.html" value="File: connection.rb">lib/thin/connection.rb</a></li>
66
+ <li><a href="../../files/lib/thin/daemonizing_rb.html" value="File: daemonizing.rb">lib/thin/daemonizing.rb</a></li>
67
+ <li><a href="../../files/lib/thin/headers_rb.html" value="File: headers.rb">lib/thin/headers.rb</a></li>
68
+ <li><a href="../../files/lib/thin/logging_rb.html" value="File: logging.rb">lib/thin/logging.rb</a></li>
69
+ <li><a href="../../files/lib/thin/request_rb.html" value="File: request.rb">lib/thin/request.rb</a></li>
70
+ <li><a href="../../files/lib/thin/response_rb.html" value="File: response.rb">lib/thin/response.rb</a></li>
71
+ <li><a href="../../files/lib/thin/server_rb.html" value="File: server.rb">lib/thin/server.rb</a></li>
72
+ <li><a href="../../files/lib/thin/statuses_rb.html" value="File: statuses.rb">lib/thin/statuses.rb</a></li>
73
+ <li><a href="../../files/lib/thin/version_rb.html" value="File: version.rb">lib/thin/version.rb</a></li>
74
+ <li><a href="../../files/lib/thin_rb.html" value="File: thin.rb">lib/thin.rb</a></li>
75
+ <li><a href="../../files/bin/thin.html" value="File: thin">bin/thin</a></li>
76
+ </ul>
77
+
78
+ <h2>Classes</h2>
79
+ <ul class="list">
80
+ <li><a href="../../classes/Rack.html" title="Module: Rack">Rack</a></li>
81
+ <li><a href="../../classes/Rack/Adapter.html" title="Module: Rack::Adapter">Rack::Adapter</a></li>
82
+ <li><a href="../../classes/Rack/Adapter/Rails.html" title="Class: Rack::Adapter::Rails">Rack::Adapter::Rails</a></li>
83
+ <li><a href="../../classes/Rack/Adapter/Rails/CGIWrapper.html" title="Class: Rack::Adapter::Rails::CGIWrapper">Rack::Adapter::Rails::CGIWrapper</a></li>
84
+ <li><a href="../../classes/Rack/Handler.html" title="Module: Rack::Handler">Rack::Handler</a></li>
85
+ <li><a href="../../classes/Rack/Handler/Thin.html" title="Class: Rack::Handler::Thin">Rack::Handler::Thin</a></li>
86
+ <li><a href="../../classes/Thin.html" title="Module: Thin">Thin</a></li>
87
+ <li><a href="../../classes/Thin/Daemonizable.html" title="Module: Thin::Daemonizable">Thin::Daemonizable</a></li>
88
+ <li><a href="../../classes/Thin/Daemonizable/ClassMethods.html" title="Module: Thin::Daemonizable::ClassMethods">Thin::Daemonizable::ClassMethods</a></li>
89
+ <li><a href="../../classes/Thin/VERSION.html" title="Module: Thin::VERSION">Thin::VERSION</a></li>
90
+ <li><a href="../../classes/Thin/Logging.html" title="Module: Thin::Logging">Thin::Logging</a></li>
91
+ <li><a href="../../classes/Thin/InvalidRequest.html" title="Class: Thin::InvalidRequest">Thin::InvalidRequest</a></li>
92
+ <li><a href="../../classes/Thin/StopServer.html" title="Class: Thin::StopServer">Thin::StopServer</a></li>
93
+ <li><a href="../../classes/Thin/Response.html" title="Class: Thin::Response">Thin::Response</a></li>
94
+ <li><a href="../../classes/Thin/Headers.html" title="Class: Thin::Headers">Thin::Headers</a></li>
95
+ <li><a href="../../classes/Thin/Server.html" title="Class: Thin::Server">Thin::Server</a></li>
96
+ <li><a href="../../classes/Thin/Request.html" title="Class: Thin::Request">Thin::Request</a></li>
97
+ <li><a href="../../classes/Thin/Connection.html" title="Class: Thin::Connection">Thin::Connection</a></li>
98
+ <li><a href="../../classes/Thin/Cluster.html" title="Class: Thin::Cluster">Thin::Cluster</a></li>
99
+ <li><a href="../../classes/Process.html" title="Module: Process">Process</a></li>
100
+ </ul>
101
+ </div>
102
+ <div id="container">
103
+ <div id="header">
104
+ <a href="/thin/" title="Home">
105
+ <img id="logo" src="../../logo.gif" />
106
+ </a>
107
+ <h2 id="tag_line">A fast and very simple Ruby web server</h2>
108
+ </div>
109
+
110
+ <div id="content">
111
+ <h2>Class: Thin::Connection</h2>
112
+
113
+
114
+ <div id="Thin::Connection" class="page_shade">
115
+ <div class="page">
116
+ <h3>Class Thin::Connection &lt; EventMachine::Connection</h3>
117
+
118
+ <span class="path">(in files
119
+ <a href="../../files/lib/thin/connection_rb.html">lib/thin/connection.rb</a>
120
+ )</span>
121
+
122
+ <p>
123
+ A request sent by the client to the server.
124
+ </p>
125
+
126
+
127
+
128
+
129
+ <h4>Includes</h4>
130
+ <ul>
131
+ <li><a href="Logging.html">Logging</a></li>
132
+ </ul>
133
+
134
+ <h2 class="ruled">Methods</h2>
135
+ <h4 class="ruled">
136
+ <span class="method-type" title="Public Instance method">Public Instance</span>
137
+ <strong><a name="M000050" href="#M000050" title="Permalink to Public Instance method: post_init">post_init()</a></strong>
138
+ </h4>
139
+
140
+
141
+ <div class="sourcecode">
142
+ <p class="source-link">[ <a href="javascript:toggleSource('M000050_source')" id="l_M000050_source">show source</a> ]</p>
143
+ <div id="M000050_source" class="dyn-source">
144
+ <pre>
145
+ <span class="ruby-comment cmt"># File lib/thin/connection.rb, line 9</span>
146
+ 9: <span class="ruby-keyword kw">def</span> <span class="ruby-identifier">post_init</span>
147
+ 10: <span class="ruby-ivar">@request</span> = <span class="ruby-constant">Request</span>.<span class="ruby-identifier">new</span>
148
+ 11: <span class="ruby-ivar">@response</span> = <span class="ruby-constant">Response</span>.<span class="ruby-identifier">new</span>
149
+ 12: <span class="ruby-keyword kw">end</span>
150
+ </pre>
151
+ </div>
152
+ </div>
153
+ <h4 class="ruled">
154
+ <span class="method-type" title="Public Instance method">Public Instance</span>
155
+ <strong><a name="M000052" href="#M000052" title="Permalink to Public Instance method: process">process()</a></strong>
156
+ </h4>
157
+
158
+
159
+ <div class="sourcecode">
160
+ <p class="source-link">[ <a href="javascript:toggleSource('M000052_source')" id="l_M000052_source">show source</a> ]</p>
161
+ <div id="M000052_source" class="dyn-source">
162
+ <pre>
163
+ <span class="ruby-comment cmt"># File lib/thin/connection.rb, line 23</span>
164
+ 23: <span class="ruby-keyword kw">def</span> <span class="ruby-identifier">process</span>
165
+ 24: <span class="ruby-identifier">env</span> = <span class="ruby-ivar">@request</span>.<span class="ruby-identifier">env</span>
166
+ 25:
167
+ 26: <span class="ruby-comment cmt"># Add client info to the request env</span>
168
+ 27: <span class="ruby-identifier">env</span>[<span class="ruby-constant">Request</span><span class="ruby-operator">::</span><span class="ruby-constant">REMOTE_ADDR</span>] = <span class="ruby-identifier">env</span>[<span class="ruby-constant">Request</span><span class="ruby-operator">::</span><span class="ruby-constant">FORWARDED_FOR</span>] <span class="ruby-operator">||</span> <span class="ruby-constant">Socket</span>.<span class="ruby-identifier">unpack_sockaddr_in</span>(<span class="ruby-identifier">get_peername</span>)[<span class="ruby-value">1</span>]
169
+ 28:
170
+ 29: <span class="ruby-comment cmt"># Process the request</span>
171
+ 30: <span class="ruby-ivar">@response</span>.<span class="ruby-identifier">status</span>, <span class="ruby-ivar">@response</span>.<span class="ruby-identifier">headers</span>, <span class="ruby-ivar">@response</span>.<span class="ruby-identifier">body</span> = <span class="ruby-ivar">@app</span>.<span class="ruby-identifier">call</span>(<span class="ruby-identifier">env</span>)
172
+ 31:
173
+ 32: <span class="ruby-comment cmt"># Send the response</span>
174
+ 33: <span class="ruby-identifier">trace</span> { <span class="ruby-ivar">@response</span>.<span class="ruby-identifier">to_s</span> }
175
+ 34: <span class="ruby-identifier">send_data</span> <span class="ruby-ivar">@response</span>.<span class="ruby-identifier">to_s</span>
176
+ 35:
177
+ 36: <span class="ruby-identifier">close_connection_after_writing</span>
178
+ 37:
179
+ 38: <span class="ruby-keyword kw">rescue</span> <span class="ruby-constant">Object</span> =<span class="ruby-operator">&gt;</span> <span class="ruby-identifier">e</span>
180
+ 39: <span class="ruby-identifier">log</span> <span class="ruby-node">&quot;Unexpected error while processing request: #{e.message}&quot;</span>
181
+ 40: <span class="ruby-identifier">log_error</span> <span class="ruby-identifier">e</span>
182
+ 41: <span class="ruby-identifier">close_connection</span> <span class="ruby-keyword kw">rescue</span> <span class="ruby-keyword kw">nil</span>
183
+ 42: <span class="ruby-keyword kw">ensure</span>
184
+ 43: <span class="ruby-ivar">@response</span>.<span class="ruby-identifier">close</span> <span class="ruby-keyword kw">rescue</span> <span class="ruby-keyword kw">nil</span>
185
+ 44: <span class="ruby-keyword kw">end</span>
186
+ </pre>
187
+ </div>
188
+ </div>
189
+ <h4 class="ruled">
190
+ <span class="method-type" title="Public Instance method">Public Instance</span>
191
+ <strong><a name="M000051" href="#M000051" title="Permalink to Public Instance method: receive_data">receive_data(data)</a></strong>
192
+ </h4>
193
+
194
+
195
+ <div class="sourcecode">
196
+ <p class="source-link">[ <a href="javascript:toggleSource('M000051_source')" id="l_M000051_source">show source</a> ]</p>
197
+ <div id="M000051_source" class="dyn-source">
198
+ <pre>
199
+ <span class="ruby-comment cmt"># File lib/thin/connection.rb, line 14</span>
200
+ 14: <span class="ruby-keyword kw">def</span> <span class="ruby-identifier">receive_data</span>(<span class="ruby-identifier">data</span>)
201
+ 15: <span class="ruby-identifier">trace</span> { <span class="ruby-identifier">data</span> }
202
+ 16: <span class="ruby-identifier">process</span> <span class="ruby-keyword kw">if</span> <span class="ruby-ivar">@request</span>.<span class="ruby-identifier">parse</span>(<span class="ruby-identifier">data</span>)
203
+ 17: <span class="ruby-keyword kw">rescue</span> <span class="ruby-constant">InvalidRequest</span> =<span class="ruby-operator">&gt;</span> <span class="ruby-identifier">e</span>
204
+ 18: <span class="ruby-identifier">log</span> <span class="ruby-value str">&quot;Invalid request&quot;</span>
205
+ 19: <span class="ruby-identifier">log_error</span> <span class="ruby-identifier">e</span>
206
+ 20: <span class="ruby-identifier">close_connection</span>
207
+ 21: <span class="ruby-keyword kw">end</span>
208
+ </pre>
209
+ </div>
210
+ </div>
211
+
212
+ </div>
213
+ </div>
214
+
215
+
216
+ </div>
217
+ </div>
218
+ <div id="footer">
219
+ <hr />
220
+ &copy; <a href="http://macournoyer.com">Marc-Andr&eacute; Cournoyer</a>
221
+ </div>
222
+ </body>
223
+ </html>
@@ -0,0 +1,260 @@
1
+
2
+ <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
3
+ <html>
4
+ <head>
5
+ <title>
6
+ thin &raquo; Module: Thin::Daemonizable
7
+ </title>
8
+ <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" />
9
+ <link rel="stylesheet" href="../.././rdoc-style.css" type="text/css" media="screen" />
10
+ <script language="JavaScript" type="text/javascript">
11
+ // <![CDATA[
12
+
13
+ function toggleSource( id )
14
+ {
15
+ var elem
16
+ var link
17
+
18
+ if( document.getElementById )
19
+ {
20
+ elem = document.getElementById( id )
21
+ link = document.getElementById( "l_" + id )
22
+ }
23
+ else if ( document.all )
24
+ {
25
+ elem = eval( "document.all." + id )
26
+ link = eval( "document.all.l_" + id )
27
+ }
28
+ else
29
+ return false;
30
+
31
+ if( elem.style.display == "block" )
32
+ {
33
+ elem.style.display = "none"
34
+ link.innerHTML = "show source"
35
+ }
36
+ else
37
+ {
38
+ elem.style.display = "block"
39
+ link.innerHTML = "hide source"
40
+ }
41
+ }
42
+
43
+ function openCode( url )
44
+ {
45
+ window.open( url, "SOURCE_CODE", "width=400,height=400,scrollbars=yes" )
46
+ }
47
+ // ]]>
48
+ </script>
49
+ </head>
50
+ <body>
51
+ <ul id="menu">
52
+ <li><a href="/thin/">about</a></li>
53
+ <li><a href="/thin/download/">download</a></li>
54
+ <li><a href="/thin/usage/">usage</a></li>
55
+ <li><a href="/thin/doc/">doc</a></li>
56
+ <li><a href="http://groups.google.com/group/thin-ruby/">community</a></li>
57
+ </ul>
58
+ <div id="sidebar">
59
+ <h2>Files</h2>
60
+ <ul class="list">
61
+ <li><a href="../../files/README.html" value="File: README">README</a></li>
62
+ <li><a href="../../files/lib/rack/adapter/rails_rb.html" value="File: rails.rb">lib/rack/adapter/rails.rb</a></li>
63
+ <li><a href="../../files/lib/rack/handler/thin_rb.html" value="File: thin.rb">lib/rack/handler/thin.rb</a></li>
64
+ <li><a href="../../files/lib/thin/cluster_rb.html" value="File: cluster.rb">lib/thin/cluster.rb</a></li>
65
+ <li><a href="../../files/lib/thin/connection_rb.html" value="File: connection.rb">lib/thin/connection.rb</a></li>
66
+ <li><a href="../../files/lib/thin/daemonizing_rb.html" value="File: daemonizing.rb">lib/thin/daemonizing.rb</a></li>
67
+ <li><a href="../../files/lib/thin/headers_rb.html" value="File: headers.rb">lib/thin/headers.rb</a></li>
68
+ <li><a href="../../files/lib/thin/logging_rb.html" value="File: logging.rb">lib/thin/logging.rb</a></li>
69
+ <li><a href="../../files/lib/thin/request_rb.html" value="File: request.rb">lib/thin/request.rb</a></li>
70
+ <li><a href="../../files/lib/thin/response_rb.html" value="File: response.rb">lib/thin/response.rb</a></li>
71
+ <li><a href="../../files/lib/thin/server_rb.html" value="File: server.rb">lib/thin/server.rb</a></li>
72
+ <li><a href="../../files/lib/thin/statuses_rb.html" value="File: statuses.rb">lib/thin/statuses.rb</a></li>
73
+ <li><a href="../../files/lib/thin/version_rb.html" value="File: version.rb">lib/thin/version.rb</a></li>
74
+ <li><a href="../../files/lib/thin_rb.html" value="File: thin.rb">lib/thin.rb</a></li>
75
+ <li><a href="../../files/bin/thin.html" value="File: thin">bin/thin</a></li>
76
+ </ul>
77
+
78
+ <h2>Classes</h2>
79
+ <ul class="list">
80
+ <li><a href="../../classes/Rack.html" title="Module: Rack">Rack</a></li>
81
+ <li><a href="../../classes/Rack/Adapter.html" title="Module: Rack::Adapter">Rack::Adapter</a></li>
82
+ <li><a href="../../classes/Rack/Adapter/Rails.html" title="Class: Rack::Adapter::Rails">Rack::Adapter::Rails</a></li>
83
+ <li><a href="../../classes/Rack/Adapter/Rails/CGIWrapper.html" title="Class: Rack::Adapter::Rails::CGIWrapper">Rack::Adapter::Rails::CGIWrapper</a></li>
84
+ <li><a href="../../classes/Rack/Handler.html" title="Module: Rack::Handler">Rack::Handler</a></li>
85
+ <li><a href="../../classes/Rack/Handler/Thin.html" title="Class: Rack::Handler::Thin">Rack::Handler::Thin</a></li>
86
+ <li><a href="../../classes/Thin.html" title="Module: Thin">Thin</a></li>
87
+ <li><a href="../../classes/Thin/Daemonizable.html" title="Module: Thin::Daemonizable">Thin::Daemonizable</a></li>
88
+ <li><a href="../../classes/Thin/Daemonizable/ClassMethods.html" title="Module: Thin::Daemonizable::ClassMethods">Thin::Daemonizable::ClassMethods</a></li>
89
+ <li><a href="../../classes/Thin/VERSION.html" title="Module: Thin::VERSION">Thin::VERSION</a></li>
90
+ <li><a href="../../classes/Thin/Logging.html" title="Module: Thin::Logging">Thin::Logging</a></li>
91
+ <li><a href="../../classes/Thin/InvalidRequest.html" title="Class: Thin::InvalidRequest">Thin::InvalidRequest</a></li>
92
+ <li><a href="../../classes/Thin/StopServer.html" title="Class: Thin::StopServer">Thin::StopServer</a></li>
93
+ <li><a href="../../classes/Thin/Response.html" title="Class: Thin::Response">Thin::Response</a></li>
94
+ <li><a href="../../classes/Thin/Headers.html" title="Class: Thin::Headers">Thin::Headers</a></li>
95
+ <li><a href="../../classes/Thin/Server.html" title="Class: Thin::Server">Thin::Server</a></li>
96
+ <li><a href="../../classes/Thin/Request.html" title="Class: Thin::Request">Thin::Request</a></li>
97
+ <li><a href="../../classes/Thin/Connection.html" title="Class: Thin::Connection">Thin::Connection</a></li>
98
+ <li><a href="../../classes/Thin/Cluster.html" title="Class: Thin::Cluster">Thin::Cluster</a></li>
99
+ <li><a href="../../classes/Process.html" title="Module: Process">Process</a></li>
100
+ </ul>
101
+ </div>
102
+ <div id="container">
103
+ <div id="header">
104
+ <a href="/thin/" title="Home">
105
+ <img id="logo" src="../../logo.gif" />
106
+ </a>
107
+ <h2 id="tag_line">A fast and very simple Ruby web server</h2>
108
+ </div>
109
+
110
+ <div id="content">
111
+ <h2>Module: Thin::Daemonizable</h2>
112
+
113
+
114
+ <div id="Thin::Daemonizable" class="page_shade">
115
+ <div class="page">
116
+ <h3>Module Thin::Daemonizable &lt; Object</h3>
117
+
118
+ <span class="path">(in files
119
+ <a href="../../files/lib/thin/daemonizing_rb.html">lib/thin/daemonizing.rb</a>
120
+ )</span>
121
+
122
+ <p>
123
+ Module <a href="Daemonizable.html#M000021">included</a> in classes that can
124
+ be turned into a daemon. Handle stuff like:
125
+ </p>
126
+ <ul>
127
+ <li>storing the PID in a file
128
+
129
+ </li>
130
+ <li>redirecting output to the log file
131
+
132
+ </li>
133
+ <li>changing processs privileges
134
+
135
+ </li>
136
+ <li>killing the process gracefully
137
+
138
+ </li>
139
+ </ul>
140
+
141
+
142
+
143
+
144
+
145
+ <h2 class="ruled">Methods</h2>
146
+ <h4 class="ruled">
147
+ <span class="method-type" title="Public Class method">Public Class</span>
148
+ <strong><a name="M000021" href="#M000021" title="Permalink to Public Class method: included">included(base)</a></strong>
149
+ </h4>
150
+
151
+
152
+ <div class="sourcecode">
153
+ <p class="source-link">[ <a href="javascript:toggleSource('M000021_source')" id="l_M000021_source">show source</a> ]</p>
154
+ <div id="M000021_source" class="dyn-source">
155
+ <pre>
156
+ <span class="ruby-comment cmt"># File lib/thin/daemonizing.rb, line 24</span>
157
+ 24: <span class="ruby-keyword kw">def</span> <span class="ruby-keyword kw">self</span>.<span class="ruby-identifier">included</span>(<span class="ruby-identifier">base</span>)
158
+ 25: <span class="ruby-identifier">base</span>.<span class="ruby-identifier">extend</span> <span class="ruby-constant">ClassMethods</span>
159
+ 26: <span class="ruby-keyword kw">end</span>
160
+ </pre>
161
+ </div>
162
+ </div>
163
+ <h4 class="ruled">
164
+ <span class="method-type" title="Public Instance method">Public Instance</span>
165
+ <strong><a name="M000024" href="#M000024" title="Permalink to Public Instance method: change_privilege">change_privilege(user, group=user)</a></strong>
166
+ </h4>
167
+
168
+ <p>
169
+ Change privileges of the process to the specified user and group.
170
+ </p>
171
+
172
+ <div class="sourcecode">
173
+ <p class="source-link">[ <a href="javascript:toggleSource('M000024_source')" id="l_M000024_source">show source</a> ]</p>
174
+ <div id="M000024_source" class="dyn-source">
175
+ <pre>
176
+ <span class="ruby-comment cmt"># File lib/thin/daemonizing.rb, line 52</span>
177
+ 52: <span class="ruby-keyword kw">def</span> <span class="ruby-identifier">change_privilege</span>(<span class="ruby-identifier">user</span>, <span class="ruby-identifier">group</span>=<span class="ruby-identifier">user</span>)
178
+ 53: <span class="ruby-identifier">check_plateform_support</span>
179
+ 54: <span class="ruby-identifier">log</span> <span class="ruby-node">&quot;&gt;&gt; Changing process privilege to #{user}:#{group}&quot;</span>
180
+ 55:
181
+ 56: <span class="ruby-identifier">uid</span>, <span class="ruby-identifier">gid</span> = <span class="ruby-constant">Process</span>.<span class="ruby-identifier">euid</span>, <span class="ruby-constant">Process</span>.<span class="ruby-identifier">egid</span>
182
+ 57: <span class="ruby-identifier">target_uid</span> = <span class="ruby-constant">Etc</span>.<span class="ruby-identifier">getpwnam</span>(<span class="ruby-identifier">user</span>).<span class="ruby-identifier">uid</span>
183
+ 58: <span class="ruby-identifier">target_gid</span> = <span class="ruby-constant">Etc</span>.<span class="ruby-identifier">getgrnam</span>(<span class="ruby-identifier">group</span>).<span class="ruby-identifier">gid</span>
184
+ 59:
185
+ 60: <span class="ruby-keyword kw">if</span> <span class="ruby-identifier">uid</span> <span class="ruby-operator">!=</span> <span class="ruby-identifier">target_uid</span> <span class="ruby-operator">||</span> <span class="ruby-identifier">gid</span> <span class="ruby-operator">!=</span> <span class="ruby-identifier">target_gid</span>
186
+ 61: <span class="ruby-comment cmt"># Change process ownership</span>
187
+ 62: <span class="ruby-constant">Process</span>.<span class="ruby-identifier">initgroups</span>(<span class="ruby-identifier">user</span>, <span class="ruby-identifier">target_gid</span>)
188
+ 63: <span class="ruby-constant">Process</span><span class="ruby-operator">::</span><span class="ruby-constant">GID</span>.<span class="ruby-identifier">change_privilege</span>(<span class="ruby-identifier">target_gid</span>)
189
+ 64: <span class="ruby-constant">Process</span><span class="ruby-operator">::</span><span class="ruby-constant">UID</span>.<span class="ruby-identifier">change_privilege</span>(<span class="ruby-identifier">target_uid</span>)
190
+ 65: <span class="ruby-keyword kw">end</span>
191
+ 66: <span class="ruby-keyword kw">rescue</span> <span class="ruby-constant">Errno</span><span class="ruby-operator">::</span><span class="ruby-constant">EPERM</span> =<span class="ruby-operator">&gt;</span> <span class="ruby-identifier">e</span>
192
+ 67: <span class="ruby-identifier">log</span> <span class="ruby-node">&quot;Couldn't change user and group to #{user}:#{group}: #{e}&quot;</span>
193
+ 68: <span class="ruby-keyword kw">end</span>
194
+ </pre>
195
+ </div>
196
+ </div>
197
+ <h4 class="ruled">
198
+ <span class="method-type" title="Public Instance method">Public Instance</span>
199
+ <strong><a name="M000023" href="#M000023" title="Permalink to Public Instance method: daemonize">daemonize()</a></strong>
200
+ </h4>
201
+
202
+ <p>
203
+ Turns the current script into a daemon process that detaches from the
204
+ console.
205
+ </p>
206
+
207
+ <div class="sourcecode">
208
+ <p class="source-link">[ <a href="javascript:toggleSource('M000023_source')" id="l_M000023_source">show source</a> ]</p>
209
+ <div id="M000023_source" class="dyn-source">
210
+ <pre>
211
+ <span class="ruby-comment cmt"># File lib/thin/daemonizing.rb, line 33</span>
212
+ 33: <span class="ruby-keyword kw">def</span> <span class="ruby-identifier">daemonize</span>
213
+ 34: <span class="ruby-identifier">check_plateform_support</span>
214
+ 35: <span class="ruby-identifier">raise</span> <span class="ruby-constant">ArgumentError</span>, <span class="ruby-value str">'You must specify a pid_file to deamonize'</span> <span class="ruby-keyword kw">unless</span> <span class="ruby-ivar">@pid_file</span>
215
+ 36:
216
+ 37: <span class="ruby-identifier">pwd</span> = <span class="ruby-constant">Dir</span>.<span class="ruby-identifier">pwd</span> <span class="ruby-comment cmt"># Current directory is changed during daemonization, so store it</span>
217
+ 38:
218
+ 39: <span class="ruby-constant">Daemonize</span>.<span class="ruby-identifier">daemonize</span>(<span class="ruby-constant">File</span>.<span class="ruby-identifier">expand_path</span>(<span class="ruby-ivar">@log_file</span>))
219
+ 40:
220
+ 41: <span class="ruby-constant">Dir</span>.<span class="ruby-identifier">chdir</span>(<span class="ruby-identifier">pwd</span>)
221
+ 42:
222
+ 43: <span class="ruby-identifier">write_pid_file</span>
223
+ 44: <span class="ruby-identifier">at_exit</span> <span class="ruby-keyword kw">do</span>
224
+ 45: <span class="ruby-identifier">log</span> <span class="ruby-value str">&quot;&gt;&gt; Exiting!&quot;</span>
225
+ 46: <span class="ruby-identifier">remove_pid_file</span>
226
+ 47: <span class="ruby-keyword kw">end</span>
227
+ 48: <span class="ruby-keyword kw">end</span>
228
+ </pre>
229
+ </div>
230
+ </div>
231
+ <h4 class="ruled">
232
+ <span class="method-type" title="Public Instance method">Public Instance</span>
233
+ <strong><a name="M000022" href="#M000022" title="Permalink to Public Instance method: pid">pid()</a></strong>
234
+ </h4>
235
+
236
+
237
+ <div class="sourcecode">
238
+ <p class="source-link">[ <a href="javascript:toggleSource('M000022_source')" id="l_M000022_source">show source</a> ]</p>
239
+ <div id="M000022_source" class="dyn-source">
240
+ <pre>
241
+ <span class="ruby-comment cmt"># File lib/thin/daemonizing.rb, line 28</span>
242
+ 28: <span class="ruby-keyword kw">def</span> <span class="ruby-identifier">pid</span>
243
+ 29: <span class="ruby-constant">File</span>.<span class="ruby-identifier">exist?</span>(<span class="ruby-identifier">pid_file</span>) <span class="ruby-operator">?</span> <span class="ruby-identifier">open</span>(<span class="ruby-identifier">pid_file</span>).<span class="ruby-identifier">read</span> <span class="ruby-operator">:</span> <span class="ruby-keyword kw">nil</span>
244
+ 30: <span class="ruby-keyword kw">end</span>
245
+ </pre>
246
+ </div>
247
+ </div>
248
+
249
+ </div>
250
+ </div>
251
+
252
+
253
+ </div>
254
+ </div>
255
+ <div id="footer">
256
+ <hr />
257
+ &copy; <a href="http://macournoyer.com">Marc-Andr&eacute; Cournoyer</a>
258
+ </div>
259
+ </body>
260
+ </html>