passenger 3.0.0.pre1 → 3.0.0.pre2

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

Potentially problematic release.


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

Files changed (189) hide show
  1. data/DEVELOPERS.TXT +2 -2
  2. data/NEWS +2 -2
  3. data/Rakefile +1 -1
  4. data/build/packaging.rb +1 -1
  5. data/doc/Users guide Apache.html +22 -22
  6. data/doc/Users guide Apache.txt +2 -2
  7. data/doc/Users guide Nginx.html +14 -14
  8. data/doc/Users guide Nginx.txt +3 -2
  9. data/doc/Users guide Standalone.html +1 -1
  10. data/doc/cxxapi/Constants_8h_source.html +1 -1
  11. data/doc/cxxapi/ResourceLocator_8h_source.html +1 -1
  12. data/doc/rdoc/classes/ConditionVariable.html +215 -0
  13. data/doc/rdoc/classes/Exception.html +120 -0
  14. data/doc/rdoc/classes/GC.html +113 -0
  15. data/doc/rdoc/classes/IO.html +221 -0
  16. data/doc/rdoc/classes/PhusionPassenger.html +368 -0
  17. data/doc/rdoc/classes/PhusionPassenger/AbstractInstaller.html +180 -0
  18. data/doc/rdoc/classes/PhusionPassenger/AbstractRequestHandler.html +647 -0
  19. data/doc/rdoc/classes/PhusionPassenger/AbstractServer.html +654 -0
  20. data/doc/rdoc/classes/PhusionPassenger/AbstractServer/InvalidPassword.html +92 -0
  21. data/doc/rdoc/classes/PhusionPassenger/AbstractServer/ServerAlreadyStarted.html +97 -0
  22. data/doc/rdoc/classes/PhusionPassenger/AbstractServer/ServerError.html +96 -0
  23. data/doc/rdoc/classes/PhusionPassenger/AbstractServer/ServerNotStarted.html +97 -0
  24. data/doc/rdoc/classes/PhusionPassenger/AbstractServer/UnknownMessage.html +96 -0
  25. data/doc/rdoc/classes/PhusionPassenger/AbstractServerCollection.html +619 -0
  26. data/doc/rdoc/classes/PhusionPassenger/AdminTools.html +142 -0
  27. data/doc/rdoc/classes/PhusionPassenger/AdminTools/MemoryStats.html +368 -0
  28. data/doc/rdoc/classes/PhusionPassenger/AdminTools/MemoryStats/Process.html +231 -0
  29. data/doc/rdoc/classes/PhusionPassenger/AdminTools/ServerInstance.html +588 -0
  30. data/doc/rdoc/classes/PhusionPassenger/AdminTools/ServerInstance/CorruptedDirectoryError.html +92 -0
  31. data/doc/rdoc/classes/PhusionPassenger/AdminTools/ServerInstance/GenerationsAbsentError.html +92 -0
  32. data/doc/rdoc/classes/PhusionPassenger/AdminTools/ServerInstance/Group.html +147 -0
  33. data/doc/rdoc/classes/PhusionPassenger/AdminTools/ServerInstance/Process.html +279 -0
  34. data/doc/rdoc/classes/PhusionPassenger/AdminTools/ServerInstance/RoleDeniedError.html +92 -0
  35. data/doc/rdoc/classes/PhusionPassenger/AdminTools/ServerInstance/StaleDirectoryError.html +92 -0
  36. data/doc/rdoc/classes/PhusionPassenger/AdminTools/ServerInstance/Stats.html +123 -0
  37. data/doc/rdoc/classes/PhusionPassenger/AdminTools/ServerInstance/UnsupportedGenerationStructureVersionError.html +92 -0
  38. data/doc/rdoc/classes/PhusionPassenger/AnalyticsLogger.html +341 -0
  39. data/doc/rdoc/classes/PhusionPassenger/AnalyticsLogger/Log.html +294 -0
  40. data/doc/rdoc/classes/PhusionPassenger/AnalyticsLogger/SharedData.html +199 -0
  41. data/doc/rdoc/classes/PhusionPassenger/AppInitError.html +155 -0
  42. data/doc/rdoc/classes/PhusionPassenger/AppProcess.html +367 -0
  43. data/doc/rdoc/classes/PhusionPassenger/ClassicRails.html +95 -0
  44. data/doc/rdoc/classes/PhusionPassenger/ClassicRails/ApplicationSpawner.html +351 -0
  45. data/doc/rdoc/classes/PhusionPassenger/ClassicRails/ApplicationSpawner/Error.html +98 -0
  46. data/doc/rdoc/classes/PhusionPassenger/ClassicRails/CGIFixed.html +200 -0
  47. data/doc/rdoc/classes/PhusionPassenger/ClassicRails/FrameworkSpawner.html +410 -0
  48. data/doc/rdoc/classes/PhusionPassenger/ClassicRails/FrameworkSpawner/Error.html +98 -0
  49. data/doc/rdoc/classes/PhusionPassenger/ClassicRails/RequestHandler.html +156 -0
  50. data/doc/rdoc/classes/PhusionPassenger/ClassicRailsExtensions.html +115 -0
  51. data/doc/rdoc/classes/PhusionPassenger/ClassicRailsExtensions/AnalyticsLogging.html +202 -0
  52. data/doc/rdoc/classes/PhusionPassenger/ConsoleTextTemplate.html +172 -0
  53. data/doc/rdoc/classes/PhusionPassenger/DebugLogging.html +273 -0
  54. data/doc/rdoc/classes/PhusionPassenger/FrameworkInitError.html +145 -0
  55. data/doc/rdoc/classes/PhusionPassenger/HTMLTemplate.html +162 -0
  56. data/doc/rdoc/classes/PhusionPassenger/InitializationError.html +141 -0
  57. data/doc/rdoc/classes/PhusionPassenger/InvalidPath.html +92 -0
  58. data/doc/rdoc/classes/PhusionPassenger/MessageChannel.html +673 -0
  59. data/doc/rdoc/classes/PhusionPassenger/MessageChannel/InvalidHashError.html +92 -0
  60. data/doc/rdoc/classes/PhusionPassenger/MessageClient.html +415 -0
  61. data/doc/rdoc/classes/PhusionPassenger/NativeSupport.html +494 -0
  62. data/doc/rdoc/classes/PhusionPassenger/NativeSupport/FileSystemWatcher.html +96 -0
  63. data/doc/rdoc/classes/PhusionPassenger/Packaging.html +129 -0
  64. data/doc/rdoc/classes/PhusionPassenger/PlatformInfo.html +1758 -0
  65. data/doc/rdoc/classes/PhusionPassenger/Plugin.html +237 -0
  66. data/doc/rdoc/classes/PhusionPassenger/Rack.html +91 -0
  67. data/doc/rdoc/classes/PhusionPassenger/Rack/ApplicationSpawner.html +312 -0
  68. data/doc/rdoc/classes/PhusionPassenger/Rack/ApplicationSpawner/Error.html +98 -0
  69. data/doc/rdoc/classes/PhusionPassenger/Rack/RequestHandler.html +218 -0
  70. data/doc/rdoc/classes/PhusionPassenger/Rails3Extensions.html +114 -0
  71. data/doc/rdoc/classes/PhusionPassenger/Rails3Extensions/AnalyticsLogging.html +256 -0
  72. data/doc/rdoc/classes/PhusionPassenger/Rails3Extensions/AnalyticsLogging/ACExtension.html +139 -0
  73. data/doc/rdoc/classes/PhusionPassenger/Rails3Extensions/AnalyticsLogging/ASBenchmarkableExtension.html +118 -0
  74. data/doc/rdoc/classes/PhusionPassenger/Rails3Extensions/AnalyticsLogging/ExceptionLogger.html +135 -0
  75. data/doc/rdoc/classes/PhusionPassenger/SpawnManager.html +378 -0
  76. data/doc/rdoc/classes/PhusionPassenger/Standalone.html +111 -0
  77. data/doc/rdoc/classes/PhusionPassenger/Standalone/AppFinder.html +252 -0
  78. data/doc/rdoc/classes/PhusionPassenger/Standalone/Command.html +161 -0
  79. data/doc/rdoc/classes/PhusionPassenger/Standalone/ConfigFile.html +368 -0
  80. data/doc/rdoc/classes/PhusionPassenger/Standalone/ConfigFile/DisallowedContextError.html +132 -0
  81. data/doc/rdoc/classes/PhusionPassenger/Standalone/HelpCommand.html +151 -0
  82. data/doc/rdoc/classes/PhusionPassenger/Standalone/Main.html +189 -0
  83. data/doc/rdoc/classes/PhusionPassenger/Standalone/PackageRuntimeCommand.html +177 -0
  84. data/doc/rdoc/classes/PhusionPassenger/Standalone/RuntimeInstaller.html +341 -0
  85. data/doc/rdoc/classes/PhusionPassenger/Standalone/StartCommand.html +203 -0
  86. data/doc/rdoc/classes/PhusionPassenger/Standalone/StatusCommand.html +156 -0
  87. data/doc/rdoc/classes/PhusionPassenger/Standalone/StopCommand.html +168 -0
  88. data/doc/rdoc/classes/PhusionPassenger/Standalone/Utils.html +86 -0
  89. data/doc/rdoc/classes/PhusionPassenger/Standalone/VersionCommand.html +135 -0
  90. data/doc/rdoc/classes/PhusionPassenger/UnknownError.html +125 -0
  91. data/doc/rdoc/classes/PhusionPassenger/Utils.html +1468 -0
  92. data/doc/rdoc/classes/PhusionPassenger/Utils/FileSystemWatcher.html +204 -0
  93. data/doc/rdoc/classes/PhusionPassenger/Utils/FileSystemWatcher/DirInfo.html +171 -0
  94. data/doc/rdoc/classes/PhusionPassenger/Utils/FileSystemWatcher/FileInfo.html +140 -0
  95. data/doc/rdoc/classes/PhusionPassenger/Utils/HostsFileParser.html +260 -0
  96. data/doc/rdoc/classes/PhusionPassenger/Utils/PseudoIO.html +169 -0
  97. data/doc/rdoc/classes/PhusionPassenger/Utils/RewindableInput.html +265 -0
  98. data/doc/rdoc/classes/PhusionPassenger/Utils/RewindableInput/Tempfile.html +120 -0
  99. data/doc/rdoc/classes/PhusionPassenger/Utils/UnseekableSocket.html +561 -0
  100. data/doc/rdoc/classes/PhusionPassenger/VersionNotFound.html +140 -0
  101. data/doc/rdoc/classes/PhusionPassenger/WSGI.html +89 -0
  102. data/doc/rdoc/classes/PhusionPassenger/WSGI/ApplicationSpawner.html +182 -0
  103. data/doc/rdoc/classes/Process.html +115 -0
  104. data/doc/rdoc/classes/Signal.html +139 -0
  105. data/doc/rdoc/created.rid +1 -0
  106. data/doc/rdoc/files/DEVELOPERS_TXT.html +276 -0
  107. data/doc/rdoc/files/README.html +157 -0
  108. data/doc/rdoc/files/ext/phusion_passenger/native_support_c.html +92 -0
  109. data/doc/rdoc/files/lib/phusion_passenger/abstract_installer_rb.html +130 -0
  110. data/doc/rdoc/files/lib/phusion_passenger/abstract_request_handler_rb.html +135 -0
  111. data/doc/rdoc/files/lib/phusion_passenger/abstract_server_collection_rb.html +126 -0
  112. data/doc/rdoc/files/lib/phusion_passenger/abstract_server_rb.html +128 -0
  113. data/doc/rdoc/files/lib/phusion_passenger/admin_tools/memory_stats_rb.html +126 -0
  114. data/doc/rdoc/files/lib/phusion_passenger/admin_tools/server_instance_rb.html +132 -0
  115. data/doc/rdoc/files/lib/phusion_passenger/admin_tools_rb.html +122 -0
  116. data/doc/rdoc/files/lib/phusion_passenger/analytics_logger_rb.html +129 -0
  117. data/doc/rdoc/files/lib/phusion_passenger/app_process_rb.html +127 -0
  118. data/doc/rdoc/files/lib/phusion_passenger/classic_rails/application_spawner_rb.html +141 -0
  119. data/doc/rdoc/files/lib/phusion_passenger/classic_rails/cgi_fixed_rb.html +126 -0
  120. data/doc/rdoc/files/lib/phusion_passenger/classic_rails/framework_spawner_rb.html +146 -0
  121. data/doc/rdoc/files/lib/phusion_passenger/classic_rails/request_handler_rb.html +125 -0
  122. data/doc/rdoc/files/lib/phusion_passenger/classic_rails_extensions/init_rb.html +132 -0
  123. data/doc/rdoc/files/lib/phusion_passenger/console_text_template_rb.html +126 -0
  124. data/doc/rdoc/files/lib/phusion_passenger/constants_rb.html +122 -0
  125. data/doc/rdoc/files/lib/phusion_passenger/debug_logging_rb.html +122 -0
  126. data/doc/rdoc/files/lib/phusion_passenger/dependencies_rb.html +147 -0
  127. data/doc/rdoc/files/lib/phusion_passenger/exceptions_rb.html +122 -0
  128. data/doc/rdoc/files/lib/phusion_passenger/html_template_rb.html +127 -0
  129. data/doc/rdoc/files/lib/phusion_passenger/message_channel_rb.html +120 -0
  130. data/doc/rdoc/files/lib/phusion_passenger/message_client_rb.html +127 -0
  131. data/doc/rdoc/files/lib/phusion_passenger/native_support_rb.html +131 -0
  132. data/doc/rdoc/files/lib/phusion_passenger/packaging_rb.html +122 -0
  133. data/doc/rdoc/files/lib/phusion_passenger/platform_info/apache_rb.html +127 -0
  134. data/doc/rdoc/files/lib/phusion_passenger/platform_info/binary_compatibility_rb.html +129 -0
  135. data/doc/rdoc/files/lib/phusion_passenger/platform_info/compiler_rb.html +126 -0
  136. data/doc/rdoc/files/lib/phusion_passenger/platform_info/curl_rb.html +126 -0
  137. data/doc/rdoc/files/lib/phusion_passenger/platform_info/documentation_tools_rb.html +126 -0
  138. data/doc/rdoc/files/lib/phusion_passenger/platform_info/linux_rb.html +126 -0
  139. data/doc/rdoc/files/lib/phusion_passenger/platform_info/operating_system_rb.html +127 -0
  140. data/doc/rdoc/files/lib/phusion_passenger/platform_info/ruby_rb.html +128 -0
  141. data/doc/rdoc/files/lib/phusion_passenger/platform_info/zlib_rb.html +126 -0
  142. data/doc/rdoc/files/lib/phusion_passenger/platform_info_rb.html +122 -0
  143. data/doc/rdoc/files/lib/phusion_passenger/plugin_rb.html +127 -0
  144. data/doc/rdoc/files/lib/phusion_passenger/public_api_rb.html +127 -0
  145. data/doc/rdoc/files/lib/phusion_passenger/rack/application_spawner_rb.html +137 -0
  146. data/doc/rdoc/files/lib/phusion_passenger/rack/request_handler_rb.html +125 -0
  147. data/doc/rdoc/files/lib/phusion_passenger/rails3_extensions/init_rb.html +127 -0
  148. data/doc/rdoc/files/lib/phusion_passenger/simple_benchmarking_rb.html +122 -0
  149. data/doc/rdoc/files/lib/phusion_passenger/spawn_manager_rb.html +160 -0
  150. data/doc/rdoc/files/lib/phusion_passenger/standalone/app_finder_rb.html +127 -0
  151. data/doc/rdoc/files/lib/phusion_passenger/standalone/command_rb.html +135 -0
  152. data/doc/rdoc/files/lib/phusion_passenger/standalone/config_file_rb.html +126 -0
  153. data/doc/rdoc/files/lib/phusion_passenger/standalone/help_command_rb.html +126 -0
  154. data/doc/rdoc/files/lib/phusion_passenger/standalone/main_rb.html +126 -0
  155. data/doc/rdoc/files/lib/phusion_passenger/standalone/package_runtime_command_rb.html +127 -0
  156. data/doc/rdoc/files/lib/phusion_passenger/standalone/runtime_installer_rb.html +132 -0
  157. data/doc/rdoc/files/lib/phusion_passenger/standalone/start_command_rb.html +136 -0
  158. data/doc/rdoc/files/lib/phusion_passenger/standalone/status_command_rb.html +126 -0
  159. data/doc/rdoc/files/lib/phusion_passenger/standalone/stop_command_rb.html +126 -0
  160. data/doc/rdoc/files/lib/phusion_passenger/standalone/utils_rb.html +126 -0
  161. data/doc/rdoc/files/lib/phusion_passenger/standalone/version_command_rb.html +127 -0
  162. data/doc/rdoc/files/lib/phusion_passenger/utils/file_system_watcher_rb.html +126 -0
  163. data/doc/rdoc/files/lib/phusion_passenger/utils/hosts_file_parser_rb.html +120 -0
  164. data/doc/rdoc/files/lib/phusion_passenger/utils/rewindable_input_rb.html +100 -0
  165. data/doc/rdoc/files/lib/phusion_passenger/utils/tmpdir_rb.html +122 -0
  166. data/doc/rdoc/files/lib/phusion_passenger/utils/unseekable_socket_rb.html +126 -0
  167. data/doc/rdoc/files/lib/phusion_passenger/utils_rb.html +179 -0
  168. data/doc/rdoc/files/lib/phusion_passenger/wsgi/application_spawner_rb.html +132 -0
  169. data/doc/rdoc/fr_class_index.html +139 -0
  170. data/doc/rdoc/fr_file_index.html +109 -0
  171. data/doc/rdoc/fr_method_index.html +435 -0
  172. data/doc/rdoc/index.html +26 -0
  173. data/doc/rdoc/rdoc-style.css +187 -0
  174. data/ext/apache2/Configuration.hpp +1 -1
  175. data/ext/apache2/Hooks.cpp +24 -2
  176. data/ext/common/AgentsStarter.hpp +57 -20
  177. data/ext/common/Constants.h +1 -1
  178. data/ext/common/ResourceLocator.h +1 -1
  179. data/ext/common/Utils/MemZeroGuard.h +1 -1
  180. data/ext/phusion_passenger/native_support.c +1 -1
  181. data/lib/phusion_passenger.rb +2 -2
  182. data/lib/phusion_passenger/abstract_installer.rb +1 -1
  183. data/lib/phusion_passenger/platform_info/apache.rb +3 -0
  184. data/lib/phusion_passenger/platform_info/binary_compatibility.rb +3 -1
  185. data/lib/phusion_passenger/platform_info/compiler.rb +25 -2
  186. data/lib/phusion_passenger/platform_info/ruby.rb +88 -14
  187. data/lib/phusion_passenger/templates/standalone/config.erb +9 -16
  188. metadata +166 -5
  189. data/ext/common/Utils/foo.cpp +0 -10
@@ -0,0 +1,98 @@
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::ClassicRails::FrameworkSpawner::Error</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::ClassicRails::FrameworkSpawner::Error</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/classic_rails/framework_spawner_rb.html">lib/phusion_passenger/classic_rails/framework_spawner.rb</a>
61
+ </td>
62
+ </tr>
63
+ <tr>
64
+ <td>Parent:</td>
65
+ <td>
66
+ AbstractServer::ServerError
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 exception means that the <a
80
+ href="../FrameworkSpawner.html">FrameworkSpawner</a> server process exited
81
+ unexpectedly.
82
+ </p>
83
+ </div>
84
+
85
+
86
+
87
+
88
+
89
+
90
+
91
+
92
+
93
+ </div>
94
+
95
+ </div>
96
+
97
+ </body>
98
+ </html>
@@ -0,0 +1,156 @@
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::ClassicRails::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::ClassicRails::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/classic_rails/request_handler_rb.html">lib/phusion_passenger/classic_rails/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 Ruby on Rails applications.
80
+ </p>
81
+ </div>
82
+
83
+
84
+
85
+ <div class="sectiontitle">Methods</div>
86
+ <ul>
87
+ <li><a href="#M000201">new</a></li>
88
+ <li><a href="#M000202">process_request</a></li>
89
+ </ul>
90
+
91
+
92
+
93
+
94
+ <div class="sectiontitle">Constants</div>
95
+ <table border='0' cellpadding='5'>
96
+ <tr valign='top'>
97
+ <td class="attr-name">NINJA_PATCHING_LOCK</td>
98
+ <td>=</td>
99
+ <td class="attr-value">Mutex.new # :nodoc:</td>
100
+ </tr>
101
+ </table>
102
+
103
+
104
+ <div class="sectiontitle">Public Class methods</div>
105
+ <div class="method">
106
+ <div class="title">
107
+ <a name="M000201"></a><b>new</b>(owner_pipe, options = {})
108
+ </div>
109
+ <div class="sourcecode">
110
+ <p class="source-link">[ <a href="javascript:toggleSource('M000201_source')" id="l_M000201_source">show source</a> ]</p>
111
+ <div id="M000201_source" class="dyn-source">
112
+ <pre>
113
+ <span class="ruby-comment cmt"># File lib/phusion_passenger/classic_rails/request_handler.rb, line 38</span>
114
+ 38: <span class="ruby-keyword kw">def</span> <span class="ruby-identifier">initialize</span>(<span class="ruby-identifier">owner_pipe</span>, <span class="ruby-identifier">options</span> = {})
115
+ 39: <span class="ruby-keyword kw">super</span>(<span class="ruby-identifier">owner_pipe</span>, <span class="ruby-identifier">options</span>)
116
+ 40: <span class="ruby-constant">NINJA_PATCHING_LOCK</span>.<span class="ruby-identifier">synchronize</span> <span class="ruby-keyword kw">do</span>
117
+ 41: <span class="ruby-identifier">ninja_patch_action_controller</span>
118
+ 42: <span class="ruby-keyword kw">end</span>
119
+ 43: <span class="ruby-keyword kw">end</span>
120
+ </pre>
121
+ </div>
122
+ </div>
123
+ </div>
124
+ <div class="sectiontitle">Protected Instance methods</div>
125
+ <div class="method">
126
+ <div class="title">
127
+ <a name="M000202"></a><b>process_request</b>(headers, input, output, status_line_desired)
128
+ </div>
129
+ <div class="description">
130
+ <p>
131
+ Overrided method.
132
+ </p>
133
+ </div>
134
+ <div class="sourcecode">
135
+ <p class="source-link">[ <a href="javascript:toggleSource('M000202_source')" id="l_M000202_source">show source</a> ]</p>
136
+ <div id="M000202_source" class="dyn-source">
137
+ <pre>
138
+ <span class="ruby-comment cmt"># File lib/phusion_passenger/classic_rails/request_handler.rb, line 47</span>
139
+ 47: <span class="ruby-keyword kw">def</span> <span class="ruby-identifier">process_request</span>(<span class="ruby-identifier">headers</span>, <span class="ruby-identifier">input</span>, <span class="ruby-identifier">output</span>, <span class="ruby-identifier">status_line_desired</span>)
140
+ 48: <span class="ruby-comment cmt"># FIXME: how to print status line?</span>
141
+ 49: <span class="ruby-identifier">headers</span>[<span class="ruby-constant">CONTENT_LENGTH</span>] = <span class="ruby-identifier">headers</span>[<span class="ruby-constant">HTTP_CONTENT_LENGTH</span>]
142
+ 50: <span class="ruby-identifier">cgi</span> = <span class="ruby-constant">CGIFixed</span>.<span class="ruby-identifier">new</span>(<span class="ruby-identifier">headers</span>, <span class="ruby-identifier">input</span>, <span class="ruby-identifier">output</span>)
143
+ 51: <span class="ruby-operator">::</span><span class="ruby-constant">Dispatcher</span>.<span class="ruby-identifier">dispatch</span>(<span class="ruby-identifier">cgi</span>,
144
+ 52: <span class="ruby-operator">::</span><span class="ruby-constant">ActionController</span><span class="ruby-operator">::</span><span class="ruby-constant">CgiRequest</span><span class="ruby-operator">::</span><span class="ruby-constant">DEFAULT_SESSION_OPTIONS</span>,
145
+ 53: <span class="ruby-identifier">cgi</span>.<span class="ruby-identifier">stdoutput</span>)
146
+ 54: <span class="ruby-keyword kw">end</span>
147
+ </pre>
148
+ </div>
149
+ </div>
150
+ </div>
151
+ </div>
152
+
153
+ </div>
154
+
155
+ </body>
156
+ </html>
@@ -0,0 +1,115 @@
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::ClassicRailsExtensions</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::ClassicRailsExtensions</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/classic_rails_extensions/init_rb.html">lib/phusion_passenger/classic_rails_extensions/init.rb</a>
61
+ </td>
62
+ </tr>
63
+ </table>
64
+ </td>
65
+ </tr>
66
+ </table>
67
+ <!-- banner header -->
68
+
69
+ <div id="bodyContent">
70
+ <div id="content">
71
+
72
+
73
+
74
+
75
+ <div class="sectiontitle">Methods</div>
76
+ <ul>
77
+ <li><a href="#M000140">init!</a></li>
78
+ </ul>
79
+
80
+
81
+
82
+ <div class="sectiontitle">Classes and Modules</div>
83
+ Module <a href="ClassicRailsExtensions/AnalyticsLogging.html" class="link">PhusionPassenger::ClassicRailsExtensions::AnalyticsLogging</a><br />
84
+
85
+
86
+
87
+
88
+ <div class="sectiontitle">Public Class methods</div>
89
+ <div class="method">
90
+ <div class="title">
91
+ <a name="M000140"></a><b>init!</b>(options)
92
+ </div>
93
+ <div class="sourcecode">
94
+ <p class="source-link">[ <a href="javascript:toggleSource('M000140_source')" id="l_M000140_source">show source</a> ]</p>
95
+ <div id="M000140_source" class="dyn-source">
96
+ <pre>
97
+ <span class="ruby-comment cmt"># File lib/phusion_passenger/classic_rails_extensions/init.rb, line 28</span>
98
+ 28: <span class="ruby-keyword kw">def</span> <span class="ruby-keyword kw">self</span>.<span class="ruby-identifier">init!</span>(<span class="ruby-identifier">options</span>)
99
+ 29: <span class="ruby-keyword kw">if</span> <span class="ruby-identifier">options</span>[<span class="ruby-value str">&quot;analytics_logger&quot;</span>] <span class="ruby-operator">&amp;&amp;</span> <span class="ruby-identifier">options</span>[<span class="ruby-value str">&quot;analytics&quot;</span>]
100
+ 30: <span class="ruby-constant">AnalyticsLogging</span>.<span class="ruby-identifier">install!</span>(<span class="ruby-identifier">options</span>)
101
+ 31: <span class="ruby-keyword kw">else</span>
102
+ 32: <span class="ruby-comment cmt"># Remove code to save memory.</span>
103
+ 33: <span class="ruby-constant">PhusionPassenger</span>.<span class="ruby-identifier">send</span>(<span class="ruby-identifier">:remove_const</span>, <span class="ruby-identifier">:ClassicRailsExtensions</span>)
104
+ 34: <span class="ruby-keyword kw">end</span>
105
+ 35: <span class="ruby-keyword kw">end</span>
106
+ </pre>
107
+ </div>
108
+ </div>
109
+ </div>
110
+ </div>
111
+
112
+ </div>
113
+
114
+ </body>
115
+ </html>
@@ -0,0 +1,202 @@
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::ClassicRailsExtensions::AnalyticsLogging</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::ClassicRailsExtensions::AnalyticsLogging</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/classic_rails_extensions/init_rb.html">lib/phusion_passenger/classic_rails_extensions/init.rb</a>
61
+ </td>
62
+ </tr>
63
+ </table>
64
+ </td>
65
+ </tr>
66
+ </table>
67
+ <!-- banner header -->
68
+
69
+ <div id="bodyContent">
70
+ <div id="content">
71
+
72
+
73
+
74
+
75
+ <div class="sectiontitle">Methods</div>
76
+ <ul>
77
+ <li><a href="#M000141">install!</a></li>
78
+ <li><a href="#M000142">new_transaction_log</a></li>
79
+ </ul>
80
+
81
+ <div class="sectiontitle">Included Modules</div>
82
+ <ul>
83
+ <li>ACBaseExtension</li>
84
+ <li>ACBenchmarkingExtension</li>
85
+ <li>ACRescueExtension</li>
86
+ <li>AVBenchmarkHelperExtension</li>
87
+ <li>ARAbstractAdapterExtension</li>
88
+ <li>CacheStoreExtension</li>
89
+ </ul>
90
+
91
+
92
+
93
+
94
+
95
+ <div class="sectiontitle">Public Class methods</div>
96
+ <div class="method">
97
+ <div class="title">
98
+ <a name="M000141"></a><b>install!</b>(options)
99
+ </div>
100
+ <div class="sourcecode">
101
+ <p class="source-link">[ <a href="javascript:toggleSource('M000141_source')" id="l_M000141_source">show source</a> ]</p>
102
+ <div id="M000141_source" class="dyn-source">
103
+ <pre>
104
+ <span class="ruby-comment cmt"># File lib/phusion_passenger/classic_rails_extensions/init.rb, line 45</span>
105
+ 45: <span class="ruby-keyword kw">def</span> <span class="ruby-keyword kw">self</span>.<span class="ruby-identifier">install!</span>(<span class="ruby-identifier">options</span>)
106
+ 46: <span class="ruby-ivar">@@analytics_logger</span> = <span class="ruby-identifier">options</span>[<span class="ruby-value str">&quot;analytics_logger&quot;</span>]
107
+ 47: <span class="ruby-comment cmt"># If the Ruby interpreter supports GC statistics then turn it on</span>
108
+ 48: <span class="ruby-comment cmt"># so that the info can be logged.</span>
109
+ 49: <span class="ruby-constant">GC</span>.<span class="ruby-identifier">enable_stats</span> <span class="ruby-keyword kw">if</span> <span class="ruby-constant">GC</span>.<span class="ruby-identifier">respond_to?</span>(<span class="ruby-identifier">:enable_stats</span>)
110
+ 50:
111
+ 51: <span class="ruby-keyword kw">if</span> <span class="ruby-keyword kw">defined?</span>(<span class="ruby-constant">ActionController</span>)
112
+ 52: <span class="ruby-identifier">require</span> <span class="ruby-value str">'phusion_passenger/classic_rails_extensions/analytics_logging/ac_base_extension'</span>
113
+ 53: <span class="ruby-constant">ActionController</span><span class="ruby-operator">::</span><span class="ruby-constant">Base</span>.<span class="ruby-identifier">class_eval</span> <span class="ruby-keyword kw">do</span>
114
+ 54: <span class="ruby-identifier">include</span> <span class="ruby-constant">ACBaseExtension</span>
115
+ 55: <span class="ruby-identifier">alias_method_chain</span> <span class="ruby-identifier">:perform_action</span>, <span class="ruby-identifier">:passenger</span>
116
+ 56: <span class="ruby-identifier">alias_method_chain</span> <span class="ruby-identifier">:render</span>, <span class="ruby-identifier">:passenger</span>
117
+ 57: <span class="ruby-keyword kw">end</span>
118
+ 58:
119
+ 59: <span class="ruby-identifier">require</span> <span class="ruby-value str">'phusion_passenger/classic_rails_extensions/analytics_logging/ac_benchmarking_extension'</span>
120
+ 60: <span class="ruby-constant">ActionController</span><span class="ruby-operator">::</span><span class="ruby-constant">Benchmarking</span><span class="ruby-operator">::</span><span class="ruby-constant">ClassMethods</span>.<span class="ruby-identifier">class_eval</span> <span class="ruby-keyword kw">do</span>
121
+ 61: <span class="ruby-identifier">include</span> <span class="ruby-constant">ACBenchmarkingExtension</span>
122
+ 62: <span class="ruby-identifier">alias_method_chain</span> <span class="ruby-identifier">:benchmark</span>, <span class="ruby-identifier">:passenger</span>
123
+ 63: <span class="ruby-keyword kw">end</span>
124
+ 64:
125
+ 65: <span class="ruby-identifier">require</span> <span class="ruby-value str">'phusion_passenger/classic_rails_extensions/analytics_logging/ac_rescue_extension'</span>
126
+ 66: <span class="ruby-constant">ActionController</span><span class="ruby-operator">::</span><span class="ruby-constant">Rescue</span>.<span class="ruby-identifier">class_eval</span> <span class="ruby-keyword kw">do</span>
127
+ 67: <span class="ruby-identifier">include</span> <span class="ruby-constant">ACRescueExtension</span>
128
+ 68: <span class="ruby-identifier">alias_method_chain</span> <span class="ruby-identifier">:rescue_action</span>, <span class="ruby-identifier">:passenger</span>
129
+ 69: <span class="ruby-keyword kw">end</span>
130
+ 70: <span class="ruby-keyword kw">end</span>
131
+ 71:
132
+ 72: <span class="ruby-keyword kw">if</span> <span class="ruby-keyword kw">defined?</span>(<span class="ruby-constant">ActionView</span>)
133
+ 73: <span class="ruby-identifier">require</span> <span class="ruby-value str">'phusion_passenger/classic_rails_extensions/analytics_logging/av_benchmark_helper_extension'</span>
134
+ 74: <span class="ruby-constant">ActionView</span><span class="ruby-operator">::</span><span class="ruby-constant">Helpers</span><span class="ruby-operator">::</span><span class="ruby-constant">BenchmarkHelper</span>.<span class="ruby-identifier">class_eval</span> <span class="ruby-keyword kw">do</span>
135
+ 75: <span class="ruby-identifier">include</span> <span class="ruby-constant">AVBenchmarkHelperExtension</span>
136
+ 76: <span class="ruby-identifier">alias_method_chain</span> <span class="ruby-identifier">:benchmark</span>, <span class="ruby-identifier">:passenger</span>
137
+ 77: <span class="ruby-keyword kw">end</span>
138
+ 78: <span class="ruby-keyword kw">end</span>
139
+ 79:
140
+ 80: <span class="ruby-keyword kw">if</span> <span class="ruby-keyword kw">defined?</span>(<span class="ruby-constant">ActiveRecord</span>)
141
+ 81: <span class="ruby-identifier">require</span> <span class="ruby-value str">'phusion_passenger/classic_rails_extensions/analytics_logging/ar_abstract_adapter_extension'</span>
142
+ 82: <span class="ruby-constant">ActiveRecord</span><span class="ruby-operator">::</span><span class="ruby-constant">ConnectionAdapters</span><span class="ruby-operator">::</span><span class="ruby-constant">AbstractAdapter</span>.<span class="ruby-identifier">class_eval</span> <span class="ruby-keyword kw">do</span>
143
+ 83: <span class="ruby-identifier">include</span> <span class="ruby-constant">ARAbstractAdapterExtension</span>
144
+ 84: <span class="ruby-identifier">alias_method_chain</span> <span class="ruby-identifier">:log</span>, <span class="ruby-identifier">:passenger</span>
145
+ 85: <span class="ruby-keyword kw">end</span>
146
+ 86: <span class="ruby-keyword kw">end</span>
147
+ 87:
148
+ 88: <span class="ruby-keyword kw">if</span> <span class="ruby-keyword kw">defined?</span>(<span class="ruby-constant">ActiveSupport</span><span class="ruby-operator">::</span><span class="ruby-constant">Cache</span><span class="ruby-operator">::</span><span class="ruby-constant">Store</span>) <span class="ruby-operator">&amp;&amp;</span> <span class="ruby-constant">Rails</span>.<span class="ruby-identifier">cache</span>
149
+ 89: <span class="ruby-identifier">require</span> <span class="ruby-value str">'phusion_passenger/classic_rails_extensions/analytics_logging/as_cache_extension'</span>
150
+ 90: <span class="ruby-constant">ActiveSupport</span><span class="ruby-operator">::</span><span class="ruby-constant">Cache</span><span class="ruby-operator">::</span><span class="ruby-constant">Store</span>.<span class="ruby-identifier">class_eval</span> <span class="ruby-keyword kw">do</span>
151
+ 91: <span class="ruby-identifier">include</span> <span class="ruby-constant">CacheStoreExtension</span>
152
+ 92: <span class="ruby-keyword kw">case</span> <span class="ruby-constant">Rails</span><span class="ruby-operator">::</span><span class="ruby-constant">VERSION</span><span class="ruby-operator">::</span><span class="ruby-constant">MINOR</span>
153
+ 93: <span class="ruby-keyword kw">when</span> <span class="ruby-value">1</span>
154
+ 94: <span class="ruby-comment cmt"># Rails 2.1</span>
155
+ 95: <span class="ruby-identifier">alias_method</span> <span class="ruby-identifier">:fetch</span>, <span class="ruby-identifier">:fetch_2_1</span>
156
+ 96: <span class="ruby-keyword kw">when</span> <span class="ruby-value">2</span>
157
+ 97: <span class="ruby-comment cmt"># Rails 2.2</span>
158
+ 98: <span class="ruby-identifier">alias_method</span> <span class="ruby-identifier">:fetch</span>, <span class="ruby-identifier">:fetch_2_2</span>
159
+ 99: <span class="ruby-keyword kw">when</span> <span class="ruby-value">3</span>
160
+ 100: <span class="ruby-comment cmt"># Rails 2.3</span>
161
+ 101: <span class="ruby-identifier">alias_method</span> <span class="ruby-identifier">:fetch</span>, <span class="ruby-identifier">:fetch_2_3</span>
162
+ 102: <span class="ruby-keyword kw">end</span>
163
+ 103: <span class="ruby-keyword kw">end</span>
164
+ 104: <span class="ruby-constant">Rails</span>.<span class="ruby-identifier">cache</span>.<span class="ruby-identifier">extend</span>(<span class="ruby-constant">ConcreteCacheStoreExtension</span>)
165
+ 105: <span class="ruby-keyword kw">end</span>
166
+ 106: <span class="ruby-keyword kw">end</span>
167
+ </pre>
168
+ </div>
169
+ </div>
170
+ </div>
171
+ <div class="method">
172
+ <div class="title">
173
+ <a name="M000142"></a><b>new_transaction_log</b>(env, category = :requests) {|log| ...}
174
+ </div>
175
+ <div class="sourcecode">
176
+ <p class="source-link">[ <a href="javascript:toggleSource('M000142_source')" id="l_M000142_source">show source</a> ]</p>
177
+ <div id="M000142_source" class="dyn-source">
178
+ <pre>
179
+ <span class="ruby-comment cmt"># File lib/phusion_passenger/classic_rails_extensions/init.rb, line 108</span>
180
+ 108: <span class="ruby-keyword kw">def</span> <span class="ruby-keyword kw">self</span>.<span class="ruby-identifier">new_transaction_log</span>(<span class="ruby-identifier">env</span>, <span class="ruby-identifier">category</span> = <span class="ruby-identifier">:requests</span>)
181
+ 109: <span class="ruby-keyword kw">if</span> <span class="ruby-identifier">env</span>[<span class="ruby-constant">PASSENGER_TXN_ID</span>]
182
+ 110: <span class="ruby-identifier">group_name</span> = <span class="ruby-identifier">env</span>[<span class="ruby-constant">PASSENGER_GROUP_NAME</span>]
183
+ 111: <span class="ruby-identifier">union_station_key</span> = <span class="ruby-identifier">env</span>[<span class="ruby-constant">PASSENGER_UNION_STATION_KEY</span>]
184
+ 112: <span class="ruby-identifier">log</span> = <span class="ruby-ivar">@@analytics_logger</span>.<span class="ruby-identifier">new_transaction</span>(<span class="ruby-identifier">group_name</span>, <span class="ruby-identifier">category</span>,
185
+ 113: <span class="ruby-identifier">union_station_key</span>)
186
+ 114: <span class="ruby-keyword kw">begin</span>
187
+ 115: <span class="ruby-keyword kw">yield</span> <span class="ruby-identifier">log</span>
188
+ 116: <span class="ruby-keyword kw">ensure</span>
189
+ 117: <span class="ruby-identifier">log</span>.<span class="ruby-identifier">close</span>
190
+ 118: <span class="ruby-keyword kw">end</span>
191
+ 119: <span class="ruby-keyword kw">end</span>
192
+ 120: <span class="ruby-keyword kw">end</span>
193
+ </pre>
194
+ </div>
195
+ </div>
196
+ </div>
197
+ </div>
198
+
199
+ </div>
200
+
201
+ </body>
202
+ </html>