colouringcode-passenger 0.1 → 0.2

Sign up to get free protection for your applications and to get access to all the features.
Files changed (170) hide show
  1. data/NEWS +129 -0
  2. data/Rakefile +2 -2
  3. data/bin/passenger-install-apache2-module +1 -0
  4. data/bin/passenger-install-nginx-module +4 -2
  5. data/ext/apache2/Hooks.cpp +4 -2
  6. data/ext/common/ApplicationPoolServer.h +1 -1
  7. data/ext/common/ApplicationPoolServerExecutable.cpp +1 -1
  8. data/ext/common/MessageChannel.h +48 -4
  9. data/ext/common/StandardApplicationPool.h +4 -2
  10. data/ext/common/Version.h +1 -1
  11. data/ext/nginx/Configuration.c +1 -1
  12. data/ext/nginx/HttpStatusExtractor.h +1 -0
  13. data/ext/nginx/ScgiRequestParser.h +1 -0
  14. data/ext/oxt/system_calls.cpp +11 -0
  15. data/ext/oxt/system_calls.hpp +2 -1
  16. data/ext/oxt/thread.hpp +97 -1
  17. data/ext/phusion_passenger/native_support.c +30 -1
  18. data/lib/phusion_passenger/constants.rb +1 -1
  19. data/lib/phusion_passenger/dependencies.rb +32 -0
  20. data/lib/phusion_passenger/message_channel.rb +45 -3
  21. data/lib/phusion_passenger/platform_info.rb +1 -1
  22. data/lib/phusion_passenger/rack/application_spawner.rb +10 -4
  23. data/lib/phusion_passenger/rack/request_handler.rb +2 -5
  24. data/lib/phusion_passenger/railz/application_spawner.rb +59 -7
  25. data/lib/phusion_passenger/utils.rb +70 -16
  26. data/{vendor/rack-1.0.0-git/lib/rack → lib/phusion_passenger/utils}/rewindable_input.rb +34 -9
  27. data/test/ApplicationPoolTest.cpp +1 -1
  28. data/test/MessageChannelTest.cpp +9 -1
  29. data/test/stub/message_channel.rb +1 -1
  30. data/test/stub/message_channel_2.rb +1 -1
  31. data/test/stub/message_channel_3.rb +2 -2
  32. metadata +43 -155
  33. data/doc/Architectural overview.html +0 -1
  34. data/doc/rdoc/classes/ConditionVariable.html +0 -194
  35. data/doc/rdoc/classes/Exception.html +0 -120
  36. data/doc/rdoc/classes/GC.html +0 -113
  37. data/doc/rdoc/classes/IO.html +0 -169
  38. data/doc/rdoc/classes/PhusionPassenger.html +0 -238
  39. data/doc/rdoc/classes/PhusionPassenger/AbstractInstaller.html +0 -153
  40. data/doc/rdoc/classes/PhusionPassenger/AbstractRequestHandler.html +0 -517
  41. data/doc/rdoc/classes/PhusionPassenger/AbstractServer.html +0 -719
  42. data/doc/rdoc/classes/PhusionPassenger/AbstractServer/ServerAlreadyStarted.html +0 -97
  43. data/doc/rdoc/classes/PhusionPassenger/AbstractServer/ServerError.html +0 -96
  44. data/doc/rdoc/classes/PhusionPassenger/AbstractServer/ServerNotStarted.html +0 -97
  45. data/doc/rdoc/classes/PhusionPassenger/AbstractServer/UnknownMessage.html +0 -96
  46. data/doc/rdoc/classes/PhusionPassenger/AbstractServerCollection.html +0 -598
  47. data/doc/rdoc/classes/PhusionPassenger/AdminTools.html +0 -140
  48. data/doc/rdoc/classes/PhusionPassenger/AdminTools/ControlProcess.html +0 -317
  49. data/doc/rdoc/classes/PhusionPassenger/AdminTools/ControlProcess/Instance.html +0 -138
  50. data/doc/rdoc/classes/PhusionPassenger/AppInitError.html +0 -154
  51. data/doc/rdoc/classes/PhusionPassenger/Application.html +0 -283
  52. data/doc/rdoc/classes/PhusionPassenger/ConsoleTextTemplate.html +0 -172
  53. data/doc/rdoc/classes/PhusionPassenger/FrameworkInitError.html +0 -145
  54. data/doc/rdoc/classes/PhusionPassenger/HTMLTemplate.html +0 -181
  55. data/doc/rdoc/classes/PhusionPassenger/InitializationError.html +0 -141
  56. data/doc/rdoc/classes/PhusionPassenger/InvalidPath.html +0 -92
  57. data/doc/rdoc/classes/PhusionPassenger/MessageChannel.html +0 -489
  58. data/doc/rdoc/classes/PhusionPassenger/NativeSupport.html +0 -350
  59. data/doc/rdoc/classes/PhusionPassenger/Rack.html +0 -91
  60. data/doc/rdoc/classes/PhusionPassenger/Rack/ApplicationSpawner.html +0 -188
  61. data/doc/rdoc/classes/PhusionPassenger/Rack/RequestHandler.html +0 -199
  62. data/doc/rdoc/classes/PhusionPassenger/Railz.html +0 -95
  63. data/doc/rdoc/classes/PhusionPassenger/Railz/ApplicationSpawner.html +0 -438
  64. data/doc/rdoc/classes/PhusionPassenger/Railz/ApplicationSpawner/Error.html +0 -98
  65. data/doc/rdoc/classes/PhusionPassenger/Railz/CGIFixed.html +0 -200
  66. data/doc/rdoc/classes/PhusionPassenger/Railz/FrameworkSpawner.html +0 -436
  67. data/doc/rdoc/classes/PhusionPassenger/Railz/FrameworkSpawner/Error.html +0 -98
  68. data/doc/rdoc/classes/PhusionPassenger/Railz/RequestHandler.html +0 -155
  69. data/doc/rdoc/classes/PhusionPassenger/SpawnManager.html +0 -402
  70. data/doc/rdoc/classes/PhusionPassenger/UnknownError.html +0 -125
  71. data/doc/rdoc/classes/PhusionPassenger/Utils.html +0 -803
  72. data/doc/rdoc/classes/PhusionPassenger/Utils/PseudoIO.html +0 -169
  73. data/doc/rdoc/classes/PhusionPassenger/VersionNotFound.html +0 -140
  74. data/doc/rdoc/classes/PhusionPassenger/WSGI.html +0 -89
  75. data/doc/rdoc/classes/PhusionPassenger/WSGI/ApplicationSpawner.html +0 -188
  76. data/doc/rdoc/classes/PlatformInfo.html +0 -866
  77. data/doc/rdoc/classes/RakeExtensions.html +0 -197
  78. data/doc/rdoc/classes/Signal.html +0 -131
  79. data/doc/rdoc/created.rid +0 -1
  80. data/doc/rdoc/files/DEVELOPERS_TXT.html +0 -255
  81. data/doc/rdoc/files/README.html +0 -175
  82. data/doc/rdoc/files/ext/phusion_passenger/native_support_c.html +0 -92
  83. data/doc/rdoc/files/lib/phusion_passenger/abstract_installer_rb.html +0 -129
  84. data/doc/rdoc/files/lib/phusion_passenger/abstract_request_handler_rb.html +0 -129
  85. data/doc/rdoc/files/lib/phusion_passenger/abstract_server_collection_rb.html +0 -126
  86. data/doc/rdoc/files/lib/phusion_passenger/abstract_server_rb.html +0 -128
  87. data/doc/rdoc/files/lib/phusion_passenger/admin_tools/control_process_rb.html +0 -130
  88. data/doc/rdoc/files/lib/phusion_passenger/admin_tools_rb.html +0 -122
  89. data/doc/rdoc/files/lib/phusion_passenger/application_rb.html +0 -127
  90. data/doc/rdoc/files/lib/phusion_passenger/console_text_template_rb.html +0 -126
  91. data/doc/rdoc/files/lib/phusion_passenger/constants_rb.html +0 -122
  92. data/doc/rdoc/files/lib/phusion_passenger/dependencies_rb.html +0 -134
  93. data/doc/rdoc/files/lib/phusion_passenger/events_rb.html +0 -122
  94. data/doc/rdoc/files/lib/phusion_passenger/exceptions_rb.html +0 -122
  95. data/doc/rdoc/files/lib/phusion_passenger/html_template_rb.html +0 -126
  96. data/doc/rdoc/files/lib/phusion_passenger/message_channel_rb.html +0 -120
  97. data/doc/rdoc/files/lib/phusion_passenger/packaging_rb.html +0 -122
  98. data/doc/rdoc/files/lib/phusion_passenger/platform_info_rb.html +0 -127
  99. data/doc/rdoc/files/lib/phusion_passenger/rack/application_spawner_rb.html +0 -133
  100. data/doc/rdoc/files/lib/phusion_passenger/rack/request_handler_rb.html +0 -125
  101. data/doc/rdoc/files/lib/phusion_passenger/railz/application_spawner_rb.html +0 -140
  102. data/doc/rdoc/files/lib/phusion_passenger/railz/cgi_fixed_rb.html +0 -126
  103. data/doc/rdoc/files/lib/phusion_passenger/railz/framework_spawner_rb.html +0 -145
  104. data/doc/rdoc/files/lib/phusion_passenger/railz/request_handler_rb.html +0 -125
  105. data/doc/rdoc/files/lib/phusion_passenger/simple_benchmarking_rb.html +0 -122
  106. data/doc/rdoc/files/lib/phusion_passenger/spawn_manager_rb.html +0 -159
  107. data/doc/rdoc/files/lib/phusion_passenger/utils_rb.html +0 -174
  108. data/doc/rdoc/files/lib/phusion_passenger/wsgi/application_spawner_rb.html +0 -129
  109. data/doc/rdoc/files/misc/rake/extensions_rb.html +0 -130
  110. data/doc/rdoc/fr_class_index.html +0 -91
  111. data/doc/rdoc/fr_file_index.html +0 -76
  112. data/doc/rdoc/fr_method_index.html +0 -205
  113. data/doc/rdoc/index.html +0 -26
  114. data/doc/rdoc/rdoc-style.css +0 -187
  115. data/vendor/README +0 -13
  116. data/vendor/README_FOR_PACKAGERS +0 -1
  117. data/vendor/rack-1.0.0-git/COPYING +0 -18
  118. data/vendor/rack-1.0.0-git/KNOWN-ISSUES +0 -18
  119. data/vendor/rack-1.0.0-git/README +0 -353
  120. data/vendor/rack-1.0.0-git/Rakefile +0 -164
  121. data/vendor/rack-1.0.0-git/lib/rack.rb +0 -90
  122. data/vendor/rack-1.0.0-git/lib/rack/adapter/camping.rb +0 -22
  123. data/vendor/rack-1.0.0-git/lib/rack/auth/abstract/handler.rb +0 -37
  124. data/vendor/rack-1.0.0-git/lib/rack/auth/abstract/request.rb +0 -37
  125. data/vendor/rack-1.0.0-git/lib/rack/auth/basic.rb +0 -58
  126. data/vendor/rack-1.0.0-git/lib/rack/auth/digest/md5.rb +0 -124
  127. data/vendor/rack-1.0.0-git/lib/rack/auth/digest/nonce.rb +0 -51
  128. data/vendor/rack-1.0.0-git/lib/rack/auth/digest/params.rb +0 -55
  129. data/vendor/rack-1.0.0-git/lib/rack/auth/digest/request.rb +0 -40
  130. data/vendor/rack-1.0.0-git/lib/rack/auth/openid.rb +0 -487
  131. data/vendor/rack-1.0.0-git/lib/rack/builder.rb +0 -63
  132. data/vendor/rack-1.0.0-git/lib/rack/cascade.rb +0 -41
  133. data/vendor/rack-1.0.0-git/lib/rack/chunked.rb +0 -49
  134. data/vendor/rack-1.0.0-git/lib/rack/commonlogger.rb +0 -52
  135. data/vendor/rack-1.0.0-git/lib/rack/conditionalget.rb +0 -47
  136. data/vendor/rack-1.0.0-git/lib/rack/content_length.rb +0 -29
  137. data/vendor/rack-1.0.0-git/lib/rack/content_type.rb +0 -23
  138. data/vendor/rack-1.0.0-git/lib/rack/deflater.rb +0 -96
  139. data/vendor/rack-1.0.0-git/lib/rack/directory.rb +0 -153
  140. data/vendor/rack-1.0.0-git/lib/rack/file.rb +0 -88
  141. data/vendor/rack-1.0.0-git/lib/rack/handler.rb +0 -69
  142. data/vendor/rack-1.0.0-git/lib/rack/handler/cgi.rb +0 -61
  143. data/vendor/rack-1.0.0-git/lib/rack/handler/evented_mongrel.rb +0 -8
  144. data/vendor/rack-1.0.0-git/lib/rack/handler/fastcgi.rb +0 -88
  145. data/vendor/rack-1.0.0-git/lib/rack/handler/lsws.rb +0 -55
  146. data/vendor/rack-1.0.0-git/lib/rack/handler/mongrel.rb +0 -84
  147. data/vendor/rack-1.0.0-git/lib/rack/handler/scgi.rb +0 -59
  148. data/vendor/rack-1.0.0-git/lib/rack/handler/swiftiplied_mongrel.rb +0 -8
  149. data/vendor/rack-1.0.0-git/lib/rack/handler/thin.rb +0 -18
  150. data/vendor/rack-1.0.0-git/lib/rack/handler/webrick.rb +0 -67
  151. data/vendor/rack-1.0.0-git/lib/rack/head.rb +0 -19
  152. data/vendor/rack-1.0.0-git/lib/rack/lint.rb +0 -537
  153. data/vendor/rack-1.0.0-git/lib/rack/lobster.rb +0 -65
  154. data/vendor/rack-1.0.0-git/lib/rack/lock.rb +0 -16
  155. data/vendor/rack-1.0.0-git/lib/rack/methodoverride.rb +0 -27
  156. data/vendor/rack-1.0.0-git/lib/rack/mime.rb +0 -204
  157. data/vendor/rack-1.0.0-git/lib/rack/mock.rb +0 -184
  158. data/vendor/rack-1.0.0-git/lib/rack/recursive.rb +0 -57
  159. data/vendor/rack-1.0.0-git/lib/rack/reloader.rb +0 -106
  160. data/vendor/rack-1.0.0-git/lib/rack/request.rb +0 -248
  161. data/vendor/rack-1.0.0-git/lib/rack/response.rb +0 -183
  162. data/vendor/rack-1.0.0-git/lib/rack/session/abstract/id.rb +0 -142
  163. data/vendor/rack-1.0.0-git/lib/rack/session/cookie.rb +0 -91
  164. data/vendor/rack-1.0.0-git/lib/rack/session/memcache.rb +0 -109
  165. data/vendor/rack-1.0.0-git/lib/rack/session/pool.rb +0 -100
  166. data/vendor/rack-1.0.0-git/lib/rack/showexceptions.rb +0 -349
  167. data/vendor/rack-1.0.0-git/lib/rack/showstatus.rb +0 -106
  168. data/vendor/rack-1.0.0-git/lib/rack/static.rb +0 -38
  169. data/vendor/rack-1.0.0-git/lib/rack/urlmap.rb +0 -55
  170. data/vendor/rack-1.0.0-git/lib/rack/utils.rb +0 -522
@@ -1,199 +0,0 @@
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
- <html>
6
- <head>
7
- <title>Class: PhusionPassenger::Rack::RequestHandler</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
-
11
- <script language="JavaScript" type="text/javascript">
12
- // <![CDATA[
13
-
14
- function toggleSource( id )
15
- {
16
- var elem
17
- var link
18
-
19
- if( document.getElementById )
20
- {
21
- elem = document.getElementById( id )
22
- link = document.getElementById( "l_" + id )
23
- }
24
- else if ( document.all )
25
- {
26
- elem = eval( "document.all." + id )
27
- link = eval( "document.all.l_" + id )
28
- }
29
- else
30
- return false;
31
-
32
- if( elem.style.display == "block" )
33
- {
34
- elem.style.display = "none"
35
- link.innerHTML = "show source"
36
- }
37
- else
38
- {
39
- elem.style.display = "block"
40
- link.innerHTML = "hide source"
41
- }
42
- }
43
-
44
- function openCode( url )
45
- {
46
- window.open( url, "SOURCE_CODE", "resizable=yes,scrollbars=yes,toolbar=no,status=no,height=480,width=750" ).focus();
47
- }
48
- // ]]>
49
- </script>
50
- </head>
51
-
52
- <body>
53
- <table width="100%" border='0' cellpadding='0' cellspacing='0' class='banner'><tr>
54
- <td class="file-title"><span class="file-title-prefix">Class</span><br />PhusionPassenger::Rack::RequestHandler</td>
55
- <td align="right">
56
- <table cellspacing="0" cellpadding="2">
57
- <tr valign="top">
58
- <td>In:</td>
59
- <td>
60
- <a href="../../../files/lib/phusion_passenger/rack/request_handler_rb.html">lib/phusion_passenger/rack/request_handler.rb</a>
61
- </td>
62
- </tr>
63
- <tr>
64
- <td>Parent:</td>
65
- <td>
66
- AbstractRequestHandler
67
- </td>
68
- </tr>
69
- </table>
70
- </td>
71
- </tr>
72
- </table>
73
- <!-- banner header -->
74
-
75
- <div id="bodyContent">
76
- <div id="content">
77
-
78
- <div class="description"><p>
79
- A request handler for <a href="../Rack.html">Rack</a> applications.
80
- </p>
81
- </div>
82
-
83
-
84
-
85
- <div class="sectiontitle">Methods</div>
86
- <ul>
87
- <li><a href="#M000042">new</a></li>
88
- <li><a href="#M000043">process_request</a></li>
89
- </ul>
90
-
91
-
92
-
93
-
94
-
95
-
96
- <div class="sectiontitle">Public Class methods</div>
97
- <div class="method">
98
- <div class="title">
99
- <a name="M000042"></a><b>new</b>(owner_pipe, app, options = {})
100
- </div>
101
- <div class="description">
102
- <p>
103
- <tt>app</tt> is the <a href="../Rack.html">Rack</a> application object.
104
- </p>
105
- </div>
106
- <div class="sourcecode">
107
- <p class="source-link">[ <a href="javascript:toggleSource('M000042_source')" id="l_M000042_source">show source</a> ]</p>
108
- <div id="M000042_source" class="dyn-source">
109
- <pre>
110
- <span class="ruby-comment cmt"># File lib/phusion_passenger/rack/request_handler.rb, line 59</span>
111
- 59: <span class="ruby-keyword kw">def</span> <span class="ruby-identifier">initialize</span>(<span class="ruby-identifier">owner_pipe</span>, <span class="ruby-identifier">app</span>, <span class="ruby-identifier">options</span> = {})
112
- 60: <span class="ruby-keyword kw">super</span>(<span class="ruby-identifier">owner_pipe</span>, <span class="ruby-identifier">options</span>)
113
- 61: <span class="ruby-ivar">@app</span> = <span class="ruby-identifier">app</span>
114
- 62: <span class="ruby-keyword kw">end</span>
115
- </pre>
116
- </div>
117
- </div>
118
- </div>
119
- <div class="sectiontitle">Protected Instance methods</div>
120
- <div class="method">
121
- <div class="title">
122
- <a name="M000043"></a><b>process_request</b>(env, input, output)
123
- </div>
124
- <div class="description">
125
- <p>
126
- Overrided method.
127
- </p>
128
- </div>
129
- <div class="sourcecode">
130
- <p class="source-link">[ <a href="javascript:toggleSource('M000043_source')" id="l_M000043_source">show source</a> ]</p>
131
- <div id="M000043_source" class="dyn-source">
132
- <pre>
133
- <span class="ruby-comment cmt"># File lib/phusion_passenger/rack/request_handler.rb, line 66</span>
134
- 66: <span class="ruby-keyword kw">def</span> <span class="ruby-identifier">process_request</span>(<span class="ruby-identifier">env</span>, <span class="ruby-identifier">input</span>, <span class="ruby-identifier">output</span>)
135
- 67: <span class="ruby-identifier">rewindable_input</span> = <span class="ruby-operator">::</span><span class="ruby-constant">Rack</span><span class="ruby-operator">::</span><span class="ruby-constant">RewindableInput</span>.<span class="ruby-identifier">new</span>(<span class="ruby-identifier">input</span>)
136
- 68: <span class="ruby-keyword kw">begin</span>
137
- 69: <span class="ruby-identifier">env</span>[<span class="ruby-constant">RACK_VERSION</span>] = <span class="ruby-constant">RACK_VERSION_VALUE</span>
138
- 70: <span class="ruby-identifier">env</span>[<span class="ruby-constant">RACK_INPUT</span>] = <span class="ruby-identifier">rewindable_input</span>
139
- 71: <span class="ruby-identifier">env</span>[<span class="ruby-constant">RACK_ERRORS</span>] = <span class="ruby-constant">STDERR</span>
140
- 72: <span class="ruby-identifier">env</span>[<span class="ruby-constant">RACK_MULTITHREAD</span>] = <span class="ruby-keyword kw">false</span>
141
- 73: <span class="ruby-identifier">env</span>[<span class="ruby-constant">RACK_MULTIPROCESS</span>] = <span class="ruby-keyword kw">true</span>
142
- 74: <span class="ruby-identifier">env</span>[<span class="ruby-constant">RACK_RUN_ONCE</span>] = <span class="ruby-keyword kw">false</span>
143
- 75:
144
- 76: <span class="ruby-keyword kw">if</span> <span class="ruby-identifier">env</span>[<span class="ruby-constant">HTTP_CONTENT_LENGTH</span>] <span class="ruby-operator">&amp;&amp;</span> <span class="ruby-identifier">env</span>[<span class="ruby-constant">CONTENT_LENGTH</span>]
145
- 77: <span class="ruby-identifier">env</span>.<span class="ruby-identifier">delete</span>(<span class="ruby-constant">HTTP_CONTENT_LENGTH</span>)
146
- 78: <span class="ruby-keyword kw">elsif</span> <span class="ruby-identifier">env</span>[<span class="ruby-constant">HTTP_CONTENT_LENGTH</span>] <span class="ruby-operator">&amp;&amp;</span> <span class="ruby-operator">!</span><span class="ruby-identifier">env</span>[<span class="ruby-constant">CONTENT_LENGTH</span>]
147
- 79: <span class="ruby-identifier">env</span>[<span class="ruby-constant">CONTENT_LENGTH</span>] = <span class="ruby-identifier">env</span>[<span class="ruby-constant">HTTP_CONTENT_LENGTH</span>]
148
- 80: <span class="ruby-identifier">env</span>.<span class="ruby-identifier">delete</span>(<span class="ruby-constant">HTTP_CONTENT_LENGTH</span>)
149
- 81: <span class="ruby-keyword kw">end</span>
150
- 82: <span class="ruby-keyword kw">if</span> <span class="ruby-identifier">env</span>[<span class="ruby-constant">HTTP_CONTENT_TYPE</span>] <span class="ruby-operator">&amp;&amp;</span> <span class="ruby-identifier">env</span>[<span class="ruby-constant">CONTENT_TYPE</span>]
151
- 83: <span class="ruby-identifier">env</span>.<span class="ruby-identifier">delete</span>(<span class="ruby-constant">HTTP_CONTENT_TYPE</span>)
152
- 84: <span class="ruby-keyword kw">elsif</span> <span class="ruby-identifier">env</span>[<span class="ruby-constant">HTTP_CONTENT_TYPE</span>] <span class="ruby-operator">&amp;&amp;</span> <span class="ruby-operator">!</span><span class="ruby-identifier">env</span>[<span class="ruby-constant">CONTENT_TYPE</span>]
153
- 85: <span class="ruby-identifier">env</span>[<span class="ruby-constant">CONTENT_TYPE</span>] = <span class="ruby-identifier">env</span>[<span class="ruby-constant">HTTP_CONTENT_TYPE</span>]
154
- 86: <span class="ruby-identifier">env</span>.<span class="ruby-identifier">delete</span>(<span class="ruby-constant">HTTP_CONTENT_TYPE</span>)
155
- 87: <span class="ruby-keyword kw">end</span>
156
- 88:
157
- 89: <span class="ruby-keyword kw">if</span> <span class="ruby-identifier">env</span>[<span class="ruby-constant">HTTPS</span>] <span class="ruby-operator">==</span> <span class="ruby-constant">YES</span> <span class="ruby-operator">||</span> <span class="ruby-identifier">env</span>[<span class="ruby-constant">HTTPS</span>] <span class="ruby-operator">==</span> <span class="ruby-constant">ON</span> <span class="ruby-operator">||</span> <span class="ruby-identifier">env</span>[<span class="ruby-constant">HTTPS</span>] <span class="ruby-operator">==</span> <span class="ruby-constant">ONE</span>
158
- 90: <span class="ruby-identifier">env</span>[<span class="ruby-constant">RACK_URL_SCHEME</span>] = <span class="ruby-constant">HTTPS_DOWNCASE</span>
159
- 91: <span class="ruby-keyword kw">else</span>
160
- 92: <span class="ruby-identifier">env</span>[<span class="ruby-constant">RACK_URL_SCHEME</span>] = <span class="ruby-constant">HTTP</span>
161
- 93: <span class="ruby-keyword kw">end</span>
162
- 94:
163
- 95: <span class="ruby-identifier">status</span>, <span class="ruby-identifier">headers</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>)
164
- 96: <span class="ruby-keyword kw">begin</span>
165
- 97: <span class="ruby-identifier">output</span>.<span class="ruby-identifier">write</span>(<span class="ruby-node">&quot;Status: #{status.to_i}#{CRLF}&quot;</span>)
166
- 98: <span class="ruby-identifier">output</span>.<span class="ruby-identifier">write</span>(<span class="ruby-node">&quot;X-Powered-By: #{PASSENGER_HEADER}#{CRLF}&quot;</span>)
167
- 99: <span class="ruby-identifier">headers</span>.<span class="ruby-identifier">each</span> <span class="ruby-keyword kw">do</span> <span class="ruby-operator">|</span><span class="ruby-identifier">key</span>, <span class="ruby-identifier">values</span><span class="ruby-operator">|</span>
168
- 100: <span class="ruby-keyword kw">if</span> <span class="ruby-identifier">values</span>.<span class="ruby-identifier">is_a?</span>(<span class="ruby-constant">String</span>)
169
- 101: <span class="ruby-identifier">values</span> = <span class="ruby-identifier">values</span>.<span class="ruby-identifier">split</span>(<span class="ruby-value str">&quot;\n&quot;</span>)
170
- 102: <span class="ruby-keyword kw">end</span>
171
- 103: <span class="ruby-identifier">values</span>.<span class="ruby-identifier">each</span> <span class="ruby-keyword kw">do</span> <span class="ruby-operator">|</span><span class="ruby-identifier">value</span><span class="ruby-operator">|</span>
172
- 104: <span class="ruby-identifier">output</span>.<span class="ruby-identifier">write</span>(<span class="ruby-node">&quot;#{key}: #{value}#{CRLF}&quot;</span>)
173
- 105: <span class="ruby-keyword kw">end</span>
174
- 106: <span class="ruby-keyword kw">end</span>
175
- 107: <span class="ruby-identifier">output</span>.<span class="ruby-identifier">write</span>(<span class="ruby-constant">CRLF</span>)
176
- 108: <span class="ruby-keyword kw">if</span> <span class="ruby-identifier">body</span>.<span class="ruby-identifier">is_a?</span>(<span class="ruby-constant">String</span>)
177
- 109: <span class="ruby-identifier">output</span>.<span class="ruby-identifier">write</span>(<span class="ruby-identifier">body</span>)
178
- 110: <span class="ruby-keyword kw">elsif</span> <span class="ruby-identifier">body</span>
179
- 111: <span class="ruby-identifier">body</span>.<span class="ruby-identifier">each</span> <span class="ruby-keyword kw">do</span> <span class="ruby-operator">|</span><span class="ruby-identifier">s</span><span class="ruby-operator">|</span>
180
- 112: <span class="ruby-identifier">output</span>.<span class="ruby-identifier">write</span>(<span class="ruby-identifier">s</span>)
181
- 113: <span class="ruby-keyword kw">end</span>
182
- 114: <span class="ruby-keyword kw">end</span>
183
- 115: <span class="ruby-keyword kw">ensure</span>
184
- 116: <span class="ruby-identifier">body</span>.<span class="ruby-identifier">close</span> <span class="ruby-keyword kw">if</span> <span class="ruby-identifier">body</span>.<span class="ruby-identifier">respond_to?</span>(<span class="ruby-identifier">:close</span>)
185
- 117: <span class="ruby-keyword kw">end</span>
186
- 118: <span class="ruby-keyword kw">ensure</span>
187
- 119: <span class="ruby-identifier">rewindable_input</span>.<span class="ruby-identifier">close</span>
188
- 120: <span class="ruby-keyword kw">end</span>
189
- 121: <span class="ruby-keyword kw">end</span>
190
- </pre>
191
- </div>
192
- </div>
193
- </div>
194
- </div>
195
-
196
- </div>
197
-
198
- </body>
199
- </html>
@@ -1,95 +0,0 @@
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
- <html>
6
- <head>
7
- <title>Module: PhusionPassenger::Railz</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
-
11
- <script language="JavaScript" type="text/javascript">
12
- // <![CDATA[
13
-
14
- function toggleSource( id )
15
- {
16
- var elem
17
- var link
18
-
19
- if( document.getElementById )
20
- {
21
- elem = document.getElementById( id )
22
- link = document.getElementById( "l_" + id )
23
- }
24
- else if ( document.all )
25
- {
26
- elem = eval( "document.all." + id )
27
- link = eval( "document.all.l_" + id )
28
- }
29
- else
30
- return false;
31
-
32
- if( elem.style.display == "block" )
33
- {
34
- elem.style.display = "none"
35
- link.innerHTML = "show source"
36
- }
37
- else
38
- {
39
- elem.style.display = "block"
40
- link.innerHTML = "hide source"
41
- }
42
- }
43
-
44
- function openCode( url )
45
- {
46
- window.open( url, "SOURCE_CODE", "resizable=yes,scrollbars=yes,toolbar=no,status=no,height=480,width=750" ).focus();
47
- }
48
- // ]]>
49
- </script>
50
- </head>
51
-
52
- <body>
53
- <table width="100%" border='0' cellpadding='0' cellspacing='0' class='banner'><tr>
54
- <td class="file-title"><span class="file-title-prefix">Module</span><br />PhusionPassenger::Railz</td>
55
- <td align="right">
56
- <table cellspacing="0" cellpadding="2">
57
- <tr valign="top">
58
- <td>In:</td>
59
- <td>
60
- <a href="../../files/lib/phusion_passenger/railz/application_spawner_rb.html">lib/phusion_passenger/railz/application_spawner.rb</a>
61
- <a href="../../files/lib/phusion_passenger/railz/cgi_fixed_rb.html">lib/phusion_passenger/railz/cgi_fixed.rb</a>
62
- <a href="../../files/lib/phusion_passenger/railz/framework_spawner_rb.html">lib/phusion_passenger/railz/framework_spawner.rb</a>
63
- <a href="../../files/lib/phusion_passenger/railz/request_handler_rb.html">lib/phusion_passenger/railz/request_handler.rb</a>
64
- </td>
65
- </tr>
66
- </table>
67
- </td>
68
- </tr>
69
- </table>
70
- <!-- banner header -->
71
-
72
- <div id="bodyContent">
73
- <div id="content">
74
-
75
-
76
-
77
-
78
-
79
-
80
-
81
- <div class="sectiontitle">Classes and Modules</div>
82
- Class <a href="Railz/ApplicationSpawner.html" class="link">PhusionPassenger::Railz::ApplicationSpawner</a><br />
83
- Class <a href="Railz/CGIFixed.html" class="link">PhusionPassenger::Railz::CGIFixed</a><br />
84
- Class <a href="Railz/FrameworkSpawner.html" class="link">PhusionPassenger::Railz::FrameworkSpawner</a><br />
85
- Class <a href="Railz/RequestHandler.html" class="link">PhusionPassenger::Railz::RequestHandler</a><br />
86
-
87
-
88
-
89
-
90
- </div>
91
-
92
- </div>
93
-
94
- </body>
95
- </html>
@@ -1,438 +0,0 @@
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
- <html>
6
- <head>
7
- <title>Class: PhusionPassenger::Railz::ApplicationSpawner</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
-
11
- <script language="JavaScript" type="text/javascript">
12
- // <![CDATA[
13
-
14
- function toggleSource( id )
15
- {
16
- var elem
17
- var link
18
-
19
- if( document.getElementById )
20
- {
21
- elem = document.getElementById( id )
22
- link = document.getElementById( "l_" + id )
23
- }
24
- else if ( document.all )
25
- {
26
- elem = eval( "document.all." + id )
27
- link = eval( "document.all.l_" + id )
28
- }
29
- else
30
- return false;
31
-
32
- if( elem.style.display == "block" )
33
- {
34
- elem.style.display = "none"
35
- link.innerHTML = "show source"
36
- }
37
- else
38
- {
39
- elem.style.display = "block"
40
- link.innerHTML = "hide source"
41
- }
42
- }
43
-
44
- function openCode( url )
45
- {
46
- window.open( url, "SOURCE_CODE", "resizable=yes,scrollbars=yes,toolbar=no,status=no,height=480,width=750" ).focus();
47
- }
48
- // ]]>
49
- </script>
50
- </head>
51
-
52
- <body>
53
- <table width="100%" border='0' cellpadding='0' cellspacing='0' class='banner'><tr>
54
- <td class="file-title"><span class="file-title-prefix">Class</span><br />PhusionPassenger::Railz::ApplicationSpawner</td>
55
- <td align="right">
56
- <table cellspacing="0" cellpadding="2">
57
- <tr valign="top">
58
- <td>In:</td>
59
- <td>
60
- <a href="../../../files/lib/phusion_passenger/railz/application_spawner_rb.html">lib/phusion_passenger/railz/application_spawner.rb</a>
61
- </td>
62
- </tr>
63
- <tr>
64
- <td>Parent:</td>
65
- <td>
66
- AbstractServer
67
- </td>
68
- </tr>
69
- </table>
70
- </td>
71
- </tr>
72
- </table>
73
- <!-- banner header -->
74
-
75
- <div id="bodyContent">
76
- <div id="content">
77
-
78
- <div class="description"><p>
79
- This class is capable of spawning instances of a single Ruby on Rails
80
- application. It does so by preloading as much of the application&#8216;s
81
- code as possible, then creating instances of the application using what is
82
- already preloaded. This makes it spawning application instances very fast,
83
- except for the first spawn.
84
- </p>
85
- <p>
86
- Use multiple instances of <a
87
- href="ApplicationSpawner.html">ApplicationSpawner</a> if you need to spawn
88
- multiple different Ruby on Rails applications.
89
- </p>
90
- <p>
91
- <b>Note</b>: <a href="ApplicationSpawner.html">ApplicationSpawner</a> may
92
- only be started asynchronously with <a
93
- href="../AbstractServer.html#M000120">AbstractServer#start</a>. Starting it
94
- synchronously with <a
95
- href="../AbstractServer.html#M000121">AbstractServer#start_synchronously</a>
96
- has not been tested.
97
- </p>
98
- </div>
99
-
100
-
101
-
102
- <div class="sectiontitle">Methods</div>
103
- <ul>
104
- <li><a href="#M000069">new</a></li>
105
- <li><a href="#M000070">spawn_application</a></li>
106
- <li><a href="#M000071">spawn_application!</a></li>
107
- <li><a href="#M000072">start</a></li>
108
- </ul>
109
-
110
- <div class="sectiontitle">Included Modules</div>
111
- <ul>
112
- <li><a href="../Utils.html">Utils</a></li>
113
- </ul>
114
-
115
-
116
- <div class="sectiontitle">Classes and Modules</div>
117
- Class <a href="ApplicationSpawner/Error.html" class="link">PhusionPassenger::Railz::ApplicationSpawner::Error</a><br />
118
-
119
-
120
- <div class="sectiontitle">Constants</div>
121
- <table border='0' cellpadding='5'>
122
- <tr valign='top'>
123
- <td class="attr-name">ROOT_UID</td>
124
- <td>=</td>
125
- <td class="attr-value">0</td>
126
- </tr>
127
- <tr valign='top'>
128
- <td>&nbsp;</td>
129
- <td colspan="2" class="attr-desc">
130
- The user ID of the root user.
131
-
132
- </td>
133
- </tr>
134
- <tr valign='top'>
135
- <td class="attr-name">ROOT_GID</td>
136
- <td>=</td>
137
- <td class="attr-value">0</td>
138
- </tr>
139
- <tr valign='top'>
140
- <td>&nbsp;</td>
141
- <td colspan="2" class="attr-desc">
142
- The group ID of the root user.
143
-
144
- </td>
145
- </tr>
146
- </table>
147
-
148
- <div class="sectiontitle">Attributes</div>
149
- <table border='0' cellpadding='5'>
150
- <tr valign='top'>
151
- <td class='attr-rw'>
152
- [R]
153
- </td>
154
- <td class='attr-name'>app_root</td>
155
- <td class='attr-desc'>
156
- The application root of this spawner.
157
-
158
- </td>
159
- </tr>
160
- </table>
161
-
162
- <div class="sectiontitle">Public Class methods</div>
163
- <div class="method">
164
- <div class="title">
165
- <a name="M000069"></a><b>new</b>(app_root, options = {})
166
- </div>
167
- <div class="description">
168
- <p>
169
- <tt>app_root</tt> is the root directory of this application, i.e. the
170
- directory that contains &#8216;app/&#8217;, &#8216;public/&#8217;, etc. If
171
- given an invalid directory, or a directory that doesn&#8216;t appear to be
172
- a Rails application root directory, then an <a
173
- href="../InvalidPath.html">InvalidPath</a> will be raised.
174
- </p>
175
- <p>
176
- Additional options are:
177
- </p>
178
- <ul>
179
- <li><tt>lower_privilege</tt> and <tt>lowest_user</tt>: If
180
- <tt>lower_privilege</tt> is true, then <a
181
- href="ApplicationSpawner.html">ApplicationSpawner</a> will attempt to
182
- switch to the user who owns the application&#8216;s
183
- <tt>config/environment.rb</tt>, and to the default group of that user.
184
-
185
- <p>
186
- If that user doesn&#8216;t exist on the system, or if that user is root,
187
- then <a href="ApplicationSpawner.html">ApplicationSpawner</a> will attempt
188
- to switch to the username given by <tt>lowest_user</tt> (and to the default
189
- group of that user). If <tt>lowest_user</tt> doesn&#8216;t exist either, or
190
- if switching user failed (because the current process does not have the
191
- privilege to do so), then <a
192
- href="ApplicationSpawner.html">ApplicationSpawner</a> will continue without
193
- reporting an error.
194
- </p>
195
- </li>
196
- <li><tt>environment</tt>: Allows one to specify the RAILS_ENV environment to
197
- use.
198
-
199
- </li>
200
- <li><tt>environment_variables</tt>: Environment variables which should be
201
- passed to the spawned application. This is NULL-seperated string of
202
- key-value pairs, encoded in base64. The last byte in the unencoded data
203
- must be a NULL.
204
-
205
- </li>
206
- <li><tt>base_uri</tt>: The base URI on which this application is deployed. It
207
- equals &quot;/&quot; string if the application is deployed on the root URI.
208
- It must not equal the empty string.
209
-
210
- </li>
211
- <li><tt>print_exceptions</tt>: Whether exceptions that have occurred during
212
- application initialization should be printed to STDERR. The default is
213
- true.
214
-
215
- </li>
216
- </ul>
217
- <p>
218
- All other options will be passed on to <a
219
- href="RequestHandler.html">RequestHandler</a>.
220
- </p>
221
- </div>
222
- <div class="sourcecode">
223
- <p class="source-link">[ <a href="javascript:toggleSource('M000069_source')" id="l_M000069_source">show source</a> ]</p>
224
- <div id="M000069_source" class="dyn-source">
225
- <pre>
226
- <span class="ruby-comment cmt"># File lib/phusion_passenger/railz/application_spawner.rb, line 102</span>
227
- 102: <span class="ruby-keyword kw">def</span> <span class="ruby-identifier">initialize</span>(<span class="ruby-identifier">app_root</span>, <span class="ruby-identifier">options</span> = {})
228
- 103: <span class="ruby-keyword kw">super</span>()
229
- 104: <span class="ruby-ivar">@app_root</span> = <span class="ruby-identifier">app_root</span>
230
- 105: <span class="ruby-ivar">@canonicalized_app_root</span> = <span class="ruby-identifier">canonicalize_path</span>(<span class="ruby-identifier">app_root</span>)
231
- 106: <span class="ruby-ivar">@options</span> = <span class="ruby-identifier">sanitize_spawn_options</span>(<span class="ruby-identifier">options</span>)
232
- 107: <span class="ruby-ivar">@lower_privilege</span> = <span class="ruby-ivar">@options</span>[<span class="ruby-value str">&quot;lower_privilege&quot;</span>]
233
- 108: <span class="ruby-ivar">@lowest_user</span> = <span class="ruby-ivar">@options</span>[<span class="ruby-value str">&quot;lowest_user&quot;</span>]
234
- 109: <span class="ruby-ivar">@environment</span> = <span class="ruby-ivar">@options</span>[<span class="ruby-value str">&quot;environment&quot;</span>]
235
- 110: <span class="ruby-ivar">@encoded_environment_variables</span> = <span class="ruby-ivar">@options</span>[<span class="ruby-value str">&quot;environment_variables&quot;</span>]
236
- 111: <span class="ruby-ivar">@base_uri</span> = <span class="ruby-ivar">@options</span>[<span class="ruby-value str">&quot;base_uri&quot;</span>] <span class="ruby-keyword kw">if</span> <span class="ruby-ivar">@options</span>[<span class="ruby-value str">&quot;base_uri&quot;</span>] <span class="ruby-operator">&amp;&amp;</span> <span class="ruby-ivar">@options</span>[<span class="ruby-value str">&quot;base_uri&quot;</span>] <span class="ruby-operator">!=</span> <span class="ruby-value str">&quot;/&quot;</span>
237
- 112: <span class="ruby-ivar">@print_exceptions</span> = <span class="ruby-ivar">@options</span>[<span class="ruby-value str">&quot;print_exceptions&quot;</span>]
238
- 113: <span class="ruby-keyword kw">self</span>.<span class="ruby-identifier">max_idle_time</span> = <span class="ruby-constant">DEFAULT_APP_SPAWNER_MAX_IDLE_TIME</span>
239
- 114: <span class="ruby-identifier">assert_valid_app_root</span>(<span class="ruby-ivar">@app_root</span>)
240
- 115: <span class="ruby-identifier">define_message_handler</span>(<span class="ruby-identifier">:spawn_application</span>, <span class="ruby-identifier">:handle_spawn_application</span>)
241
- 116: <span class="ruby-keyword kw">end</span>
242
- </pre>
243
- </div>
244
- </div>
245
- </div>
246
- <div class="sectiontitle">Public Instance methods</div>
247
- <div class="method">
248
- <div class="title">
249
- <a name="M000070"></a><b>spawn_application</b>()
250
- </div>
251
- <div class="description">
252
- <p>
253
- Spawn an instance of the RoR application. When successful, an <a
254
- href="../Application.html">Application</a> object will be returned, which
255
- represents the spawned RoR application.
256
- </p>
257
- <p>
258
- Raises:
259
- </p>
260
- <ul>
261
- <li><a
262
- href="../AbstractServer/ServerNotStarted.html">AbstractServer::ServerNotStarted</a>:
263
- The <a href="ApplicationSpawner.html">ApplicationSpawner</a> server
264
- hasn&#8216;t already been started.
265
-
266
- </li>
267
- <li><a href="ApplicationSpawner/Error.html">ApplicationSpawner::Error</a>: The
268
- <a href="ApplicationSpawner.html">ApplicationSpawner</a> server exited
269
- unexpectedly.
270
-
271
- </li>
272
- </ul>
273
- </div>
274
- <div class="sourcecode">
275
- <p class="source-link">[ <a href="javascript:toggleSource('M000070_source')" id="l_M000070_source">show source</a> ]</p>
276
- <div id="M000070_source" class="dyn-source">
277
- <pre>
278
- <span class="ruby-comment cmt"># File lib/phusion_passenger/railz/application_spawner.rb, line 124</span>
279
- 124: <span class="ruby-keyword kw">def</span> <span class="ruby-identifier">spawn_application</span>
280
- 125: <span class="ruby-identifier">server</span>.<span class="ruby-identifier">write</span>(<span class="ruby-value str">&quot;spawn_application&quot;</span>)
281
- 126: <span class="ruby-identifier">pid</span>, <span class="ruby-identifier">socket_name</span>, <span class="ruby-identifier">socket_type</span> = <span class="ruby-identifier">server</span>.<span class="ruby-identifier">read</span>
282
- 127: <span class="ruby-keyword kw">if</span> <span class="ruby-identifier">pid</span>.<span class="ruby-identifier">nil?</span>
283
- 128: <span class="ruby-identifier">raise</span> <span class="ruby-constant">IOError</span>, <span class="ruby-value str">&quot;Connection closed&quot;</span>
284
- 129: <span class="ruby-keyword kw">end</span>
285
- 130: <span class="ruby-identifier">owner_pipe</span> = <span class="ruby-identifier">server</span>.<span class="ruby-identifier">recv_io</span>
286
- 131: <span class="ruby-keyword kw">return</span> <span class="ruby-constant">Application</span>.<span class="ruby-identifier">new</span>(<span class="ruby-ivar">@app_root</span>, <span class="ruby-identifier">pid</span>, <span class="ruby-identifier">socket_name</span>,
287
- 132: <span class="ruby-identifier">socket_type</span>, <span class="ruby-identifier">owner_pipe</span>)
288
- 133: <span class="ruby-keyword kw">rescue</span> <span class="ruby-constant">SystemCallError</span>, <span class="ruby-constant">IOError</span>, <span class="ruby-constant">SocketError</span> =<span class="ruby-operator">&gt;</span> <span class="ruby-identifier">e</span>
289
- 134: <span class="ruby-identifier">raise</span> <span class="ruby-constant">Error</span>, <span class="ruby-node">&quot;The application spawner server exited unexpectedly: #{e}&quot;</span>
290
- 135: <span class="ruby-keyword kw">end</span>
291
- </pre>
292
- </div>
293
- </div>
294
- </div>
295
- <div class="method">
296
- <div class="title">
297
- <a name="M000071"></a><b>spawn_application!</b>()
298
- </div>
299
- <div class="description">
300
- <p>
301
- Spawn an instance of the RoR application. When successful, an <a
302
- href="../Application.html">Application</a> object will be returned, which
303
- represents the spawned RoR application.
304
- </p>
305
- <p>
306
- Unlike <a href="ApplicationSpawner.html#M000070">spawn_application</a>,
307
- this method may be called even when the <a
308
- href="ApplicationSpawner.html">ApplicationSpawner</a> server isn&#8216;t
309
- started. This allows one to spawn a RoR application without preloading any
310
- source files.
311
- </p>
312
- <p>
313
- This method may only be called if no Rails framework has been loaded in the
314
- current Ruby VM.
315
- </p>
316
- <p>
317
- Raises:
318
- </p>
319
- <ul>
320
- <li><a href="../AppInitError.html">AppInitError</a>: The Ruby on Rails
321
- application raised an exception or called exit() during startup.
322
-
323
- </li>
324
- <li>SystemCallError, IOError, SocketError: Something went wrong.
325
-
326
- </li>
327
- </ul>
328
- </div>
329
- <div class="sourcecode">
330
- <p class="source-link">[ <a href="javascript:toggleSource('M000071_source')" id="l_M000071_source">show source</a> ]</p>
331
- <div id="M000071_source" class="dyn-source">
332
- <pre>
333
- <span class="ruby-comment cmt"># File lib/phusion_passenger/railz/application_spawner.rb, line 151</span>
334
- 151: <span class="ruby-keyword kw">def</span> <span class="ruby-identifier">spawn_application!</span>
335
- 152: <span class="ruby-identifier">a</span>, <span class="ruby-identifier">b</span> = <span class="ruby-constant">UNIXSocket</span>.<span class="ruby-identifier">pair</span>
336
- 153: <span class="ruby-identifier">pid</span> = <span class="ruby-identifier">safe_fork</span>(<span class="ruby-value str">'application'</span>, <span class="ruby-keyword kw">true</span>) <span class="ruby-keyword kw">do</span>
337
- 154: <span class="ruby-keyword kw">begin</span>
338
- 155: <span class="ruby-identifier">a</span>.<span class="ruby-identifier">close</span>
339
- 156:
340
- 157: <span class="ruby-identifier">file_descriptors_to_leave_open</span> = [<span class="ruby-value">0</span>, <span class="ruby-value">1</span>, <span class="ruby-value">2</span>, <span class="ruby-identifier">b</span>.<span class="ruby-identifier">fileno</span>]
341
- 158: <span class="ruby-constant">NativeSupport</span>.<span class="ruby-identifier">close_all_file_descriptors</span>(<span class="ruby-identifier">file_descriptors_to_leave_open</span>)
342
- 159: <span class="ruby-identifier">close_all_io_objects_for_fds</span>(<span class="ruby-identifier">file_descriptors_to_leave_open</span>)
343
- 160:
344
- 161: <span class="ruby-identifier">channel</span> = <span class="ruby-constant">MessageChannel</span>.<span class="ruby-identifier">new</span>(<span class="ruby-identifier">b</span>)
345
- 162: <span class="ruby-identifier">success</span> = <span class="ruby-identifier">report_app_init_status</span>(<span class="ruby-identifier">channel</span>) <span class="ruby-keyword kw">do</span>
346
- 163: <span class="ruby-constant">ENV</span>[<span class="ruby-value str">'RAILS_ENV'</span>] = <span class="ruby-ivar">@environment</span>
347
- 164: <span class="ruby-constant">ENV</span>[<span class="ruby-value str">'RAILS_RELATIVE_URL_ROOT'</span>] = <span class="ruby-ivar">@base_uri</span>
348
- 165: <span class="ruby-constant">Dir</span>.<span class="ruby-identifier">chdir</span>(<span class="ruby-ivar">@app_root</span>)
349
- 166: <span class="ruby-keyword kw">if</span> <span class="ruby-ivar">@encoded_environment_variables</span>
350
- 167: <span class="ruby-identifier">set_passed_environment_variables</span>
351
- 168: <span class="ruby-keyword kw">end</span>
352
- 169: <span class="ruby-keyword kw">if</span> <span class="ruby-ivar">@lower_privilege</span>
353
- 170: <span class="ruby-identifier">lower_privilege</span>(<span class="ruby-value str">'config/environment.rb'</span>, <span class="ruby-ivar">@lowest_user</span>)
354
- 171: <span class="ruby-keyword kw">end</span>
355
- 172:
356
- 173: <span class="ruby-identifier">require</span> <span class="ruby-constant">File</span>.<span class="ruby-identifier">expand_path</span>(<span class="ruby-value str">'config/environment'</span>)
357
- 174: <span class="ruby-identifier">require</span> <span class="ruby-value str">'dispatcher'</span>
358
- 175: <span class="ruby-keyword kw">end</span>
359
- 176: <span class="ruby-keyword kw">if</span> <span class="ruby-identifier">success</span>
360
- 177: <span class="ruby-identifier">start_request_handler</span>(<span class="ruby-identifier">channel</span>, <span class="ruby-keyword kw">false</span>)
361
- 178: <span class="ruby-keyword kw">end</span>
362
- 179: <span class="ruby-keyword kw">rescue</span> <span class="ruby-constant">SignalException</span> =<span class="ruby-operator">&gt;</span> <span class="ruby-identifier">e</span>
363
- 180: <span class="ruby-keyword kw">if</span> <span class="ruby-identifier">e</span>.<span class="ruby-identifier">message</span> <span class="ruby-operator">!=</span> <span class="ruby-constant">AbstractRequestHandler</span><span class="ruby-operator">::</span><span class="ruby-constant">HARD_TERMINATION_SIGNAL</span> <span class="ruby-operator">&amp;&amp;</span>
364
- 181: <span class="ruby-identifier">e</span>.<span class="ruby-identifier">message</span> <span class="ruby-operator">!=</span> <span class="ruby-constant">AbstractRequestHandler</span><span class="ruby-operator">::</span><span class="ruby-constant">SOFT_TERMINATION_SIGNAL</span>
365
- 182: <span class="ruby-identifier">raise</span>
366
- 183: <span class="ruby-keyword kw">end</span>
367
- 184: <span class="ruby-keyword kw">end</span>
368
- 185: <span class="ruby-keyword kw">end</span>
369
- 186: <span class="ruby-identifier">b</span>.<span class="ruby-identifier">close</span>
370
- 187: <span class="ruby-constant">Process</span>.<span class="ruby-identifier">waitpid</span>(<span class="ruby-identifier">pid</span>) <span class="ruby-keyword kw">rescue</span> <span class="ruby-keyword kw">nil</span>
371
- 188:
372
- 189: <span class="ruby-identifier">channel</span> = <span class="ruby-constant">MessageChannel</span>.<span class="ruby-identifier">new</span>(<span class="ruby-identifier">a</span>)
373
- 190: <span class="ruby-identifier">unmarshal_and_raise_errors</span>(<span class="ruby-identifier">channel</span>, <span class="ruby-ivar">@print_exceptions</span>)
374
- 191:
375
- 192: <span class="ruby-comment cmt"># No exception was raised, so spawning succeeded.</span>
376
- 193: <span class="ruby-identifier">pid</span>, <span class="ruby-identifier">socket_name</span>, <span class="ruby-identifier">socket_type</span> = <span class="ruby-identifier">channel</span>.<span class="ruby-identifier">read</span>
377
- 194: <span class="ruby-keyword kw">if</span> <span class="ruby-identifier">pid</span>.<span class="ruby-identifier">nil?</span>
378
- 195: <span class="ruby-identifier">raise</span> <span class="ruby-constant">IOError</span>, <span class="ruby-value str">&quot;Connection closed&quot;</span>
379
- 196: <span class="ruby-keyword kw">end</span>
380
- 197: <span class="ruby-identifier">owner_pipe</span> = <span class="ruby-identifier">channel</span>.<span class="ruby-identifier">recv_io</span>
381
- 198: <span class="ruby-keyword kw">return</span> <span class="ruby-constant">Application</span>.<span class="ruby-identifier">new</span>(<span class="ruby-ivar">@app_root</span>, <span class="ruby-identifier">pid</span>, <span class="ruby-identifier">socket_name</span>,
382
- 199: <span class="ruby-identifier">socket_type</span>, <span class="ruby-identifier">owner_pipe</span>)
383
- 200: <span class="ruby-keyword kw">end</span>
384
- </pre>
385
- </div>
386
- </div>
387
- </div>
388
- <div class="method">
389
- <div class="title">
390
- <a name="M000072"></a><b>start</b>()
391
- </div>
392
- <div class="description">
393
- <p>
394
- Overrided from <a
395
- href="../AbstractServer.html#M000120">AbstractServer#start</a>.
396
- </p>
397
- <p>
398
- May raise these additional exceptions:
399
- </p>
400
- <ul>
401
- <li><a href="../AppInitError.html">AppInitError</a>: The Ruby on Rails
402
- application raised an exception or called exit() during startup.
403
-
404
- </li>
405
- <li><a href="ApplicationSpawner/Error.html">ApplicationSpawner::Error</a>: The
406
- <a href="ApplicationSpawner.html">ApplicationSpawner</a> server exited
407
- unexpectedly.
408
-
409
- </li>
410
- </ul>
411
- </div>
412
- <div class="sourcecode">
413
- <p class="source-link">[ <a href="javascript:toggleSource('M000072_source')" id="l_M000072_source">show source</a> ]</p>
414
- <div id="M000072_source" class="dyn-source">
415
- <pre>
416
- <span class="ruby-comment cmt"># File lib/phusion_passenger/railz/application_spawner.rb, line 208</span>
417
- 208: <span class="ruby-keyword kw">def</span> <span class="ruby-identifier">start</span>
418
- 209: <span class="ruby-keyword kw">super</span>
419
- 210: <span class="ruby-keyword kw">begin</span>
420
- 211: <span class="ruby-identifier">unmarshal_and_raise_errors</span>(<span class="ruby-identifier">server</span>, <span class="ruby-ivar">@print_exceptions</span>)
421
- 212: <span class="ruby-keyword kw">rescue</span> <span class="ruby-constant">IOError</span>, <span class="ruby-constant">SystemCallError</span>, <span class="ruby-constant">SocketError</span> =<span class="ruby-operator">&gt;</span> <span class="ruby-identifier">e</span>
422
- 213: <span class="ruby-identifier">stop</span>
423
- 214: <span class="ruby-identifier">raise</span> <span class="ruby-constant">Error</span>, <span class="ruby-node">&quot;The application spawner server exited unexpectedly: #{e}&quot;</span>
424
- 215: <span class="ruby-keyword kw">rescue</span>
425
- 216: <span class="ruby-identifier">stop</span>
426
- 217: <span class="ruby-identifier">raise</span>
427
- 218: <span class="ruby-keyword kw">end</span>
428
- 219: <span class="ruby-keyword kw">end</span>
429
- </pre>
430
- </div>
431
- </div>
432
- </div>
433
- </div>
434
-
435
- </div>
436
-
437
- </body>
438
- </html>