File: directives.html

package info (click to toggle)
libapache2-mod-rivet 3.2.2-1
  • links: PTS
  • area: main
  • in suites: bookworm
  • size: 6,296 kB
  • sloc: xml: 8,554; tcl: 7,568; ansic: 7,094; sh: 5,017; makefile: 195; sql: 91; lisp: 78
file content (306 lines) | stat: -rw-r--r-- 34,775 bytes parent folder | download | duplicates (2)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
<html><head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8"><title>Apache Rivet 3.2 Configuration</title><link rel="stylesheet" type="text/css" href="rivet.css"><meta name="generator" content="DocBook XSL Stylesheets Vsnapshot"><link rel="home" href="index.html" title="Apache Rivet 3.2"><link rel="up" href="index.html" title="Apache Rivet 3.2"><link rel="prev" href="cmake.html" title="Building Rivet 3.2 with CMake"><link rel="next" href="processing.html" title="Apache Rivet HTTP Request Processing"></head><body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF"><div class="navheader"><table width="100%" summary="Navigation header"><tr><th colspan="3" align="center">Apache Rivet 3.2 Configuration</th></tr><tr><td width="20%" align="left"><a accesskey="p" href="cmake.html"><img src="images/prev.png" alt="Prev"></a> </td><th width="60%" align="center"> </th><td width="20%" align="right"> <a accesskey="n" href="processing.html"><img src="images/next.png" alt="Next"></a></td></tr></table></div><div class="section"><div class="titlepage"><div><div><hr><h2 class="title" style="clear: both"><a name="directives"></a>Apache Rivet 3.2 Configuration</h2></div></div></div><div class="section"><div class="titlepage"><div><div><h3 class="title"><a name="idm204"></a>Apache Rivet Configuration lines</h3></div></div></div><p style="width:90%">
	      Rivet directives are used within the Apache httpd server
	      configuration to set up the environment where Rivet script
	      will be run.
		</p><p style="width:90%">
			Rivet has 3 general <span class="quote">“<span class="quote">scope</span>”</span> directives

			</p><div class="itemizedlist"><ul class="itemizedlist" style="list-style-type: disc; "><li class="listitem">RivetDirConf: for configuration directives meant to
				apply to a directory tree</li><li class="listitem">RivetUserConf: for directives specific to
				a user private space</li><li class="listitem">RivetServerConf: for any directive meant to apply
				globally (either to the whole Rivet installation or a	single 
				<a class="ulink" href="https://httpd.apache.org/docs/2.4/vhosts" target="_top">virtual host</a>)
				</li></ul></div><p style="width:90%">
	      
			These directives are applied so that RivetDirConf will
	      override RivetUserConf, which in turn overrides any 
	      RivetServerConf directives. Not every configuration directory
	      is meaningful to a scope directive, as shown in the table below. The scope
	      of application of a configuration line is matched also with the context where
	      it appears. Virtual hosts definitions are contexts where rivet configuration
	      lines can appear in many adding further customization to a given virtual
	      host server.
	   </p><p style="width:90%">
			Example of configuration of a web server having independent 
			interpreters for each virtual host, a larger default cache and a specific
			script to be executed before any templates/scripts located in /var/www/myrivetapp
		</p><pre class="programlisting">&lt;IfModule rivet_module&gt;
    AddType application/x-httpd-rivet .rvt
    AddType application/x-rivet-tcl   .tcl

    RivetServerConf CacheSize              100
    RivetServerConf SeparateVirtualInterps On
&lt;/IfModule&gt;

&lt;Directory /var/www/myrivetapp&gt;
    RivetDirConf BeforeScript "source /var/www/myrivetapp/before_script.tcl"
&lt;/Directory&gt;</pre></div><div class="section"><div class="titlepage"><div><div><h3 class="title"><a name="idm216"></a>Configuration Directives</h3></div></div></div><div class="table"><table align="center" title="Configuration Directives application scopes" class="directives"><thead><td>Configuration Directives</td><td>DirConf</td><td>UserConf</td><td>ServerConf</td><td>Virtual Host</td><td>Notes</td></thead><tbody><tr><td>AbortScript</td><td>X</td><td>X</td><td>X</td><td>X</td>
					<td>This directive is meaningful with the default request handler. In order
					to have this triggered by calling ::rivet::abort_page or ::rivet::exit
					any special request handler should explicitly read this script from the configuration
					using ::rivet::inspect and evaluate it (see <a class="xref" href="request.html" title="Apache Child Processes Lifecycle and Request Processing">the section called “Apache Child Processes Lifecycle and Request Processing”</a>)</td>
				</tr><tr><td>AfterScript</td><td>X</td><td>X</td><td>X</td><td>X</td><td>Special request handler scripts
				should read it from the configuration calling ::rivet::inspect and evaluate it</td></tr><tr><td>AfterEveryScript</td><td>X</td><td>X</td><td>X</td><td>X</td><td>See notes for the AfterScript directive</td></tr><tr><td>BeforeScript</td><td>X</td><td>X</td><td>X</td><td>X</td>
					 <td>See notes for the AfterScript directive</td></tr><tr><td>CacheSize</td><td></td><td></td><td>X</td><td>X</td><td></td></tr><tr><td>ChildExitScript</td><td></td><td></td><td>X</td><td>X</td><td></td></tr><tr><td>ChildInitScript</td><td></td><td></td><td>X</td><td>X</td><td></td></tr><tr><td>ErrorScript</td><td>X</td><td>X</td><td>X</td><td>X</td>
					<td>Rivet provides a default error handler. In case you are writing your own request
					handling procedure you need to call this error handler yourself or develop your
					application specific error handler to be integrated into the RequestHandler script.
					See also the notes for the AbortScript and AfterScript directives</td></tr><tr><td>ExportRivetNS</td><td></td><td></td><td>X</td><td>X</td><td>It can be set in a virtual host
				configuration if SeparateVirtualInterps is On, otherwise this directive can be safely used at the global level only</td></tr><tr><td>GlobalInitScript</td><td></td><td></td><td>X</td><td></td>
				    <td>effective only when SeparateVirtualInterps is Off (default)</td></tr><tr><td>ImportRivetNS</td><td></td><td></td><td>X</td><td>X</td><td>It can be set in a virtual host
				configuration if SeparateVirtualInterps is On, otherwise this directive can be safely used at the global level only</td></tr><tr><td>HonorHeadRequests</td><td></td><td></td><td>X</td><td>X</td><td>Replaces HonorHeaderOnlyReqs, which is still supported but DEPRECATED</td></tr><tr><td>MpmBridge</td><td></td><td></td><td>X</td><td></td><td>global only</td></tr><tr><td>RequestHandler</td><td></td><td></td><td>X</td><td>X</td><td></td></tr><tr><td>SeparateChannels</td><td></td><td></td><td>X</td><td></td><td>global only (DEPRECATED: will be
				replaced in future versions of Rivet)</td></tr><tr><td>SeparateVirtualInterps</td><td></td><td></td><td>X</td><td></td><td>global only</td></tr><tr><td>ServerInitScript</td><td></td><td></td><td>X</td><td></td><td>global only</td></tr><tr><td>SingleThreadExit</td><td></td><td></td><td>X</td><td></td><td>global only</td></tr><tr><td>UploadDirectory</td><td>X</td><td>X</td><td>X</td><td>X</td><td></td></tr><tr><td>UploadFilesToVar</td><td></td><td></td><td>X</td><td>X</td><td></td></tr><tr><td>UploadMaxSize</td><td></td><td></td><td>X</td><td>X</td><td></td></tr></tbody></table></div><div class="variablelist"><dl class="variablelist"><dt><span class="term">
					<div class="cmdsynopsis" style="width:80%"><div style="border: 1px solid #282; margin:1ex ; padding:.4ex; padding-left: 0.8ex;   word-spacing:1ex "> <span style="font-family:monospace; font-weight: bold;">AbortScript</span>  ?<span style="font-family:monospace; font-weight: bold;"><em class="replaceable"><code>script</code></em></span>?</div></div>
				</span></dt><dd><div style="padding:4 ; margin-top:3 ; margin-bottom:3 ; width:75%"><div style="margin-bottom:1.5ex ; padding .5ex">
						If an AbortScript is defined control is passed to it as
						soon as the command <a class="xref" href="abort_page.html" title="abort_page">abort_page</a> is called.
						AbortScript
						is the right place where specific actions can be taken
						to catch resources left dangling by the sudden interruption.				
					</div></div></dd><dt><span class="term">
					<div class="cmdsynopsis" style="width:80%"><div style="border: 1px solid #282; margin:1ex ; padding:.4ex; padding-left: 0.8ex;   word-spacing:1ex "> <span style="font-family:monospace; font-weight: bold;">AfterScript</span>  ?<span style="font-family:monospace; font-weight: bold;"><em class="replaceable"><code>script</code></em></span>?</div></div>
		      </span></dt><dd><div style="padding:4 ; margin-top:3 ; margin-bottom:3 ; width:75%"><div style="margin-bottom:1.5ex ; padding .5ex">
					  Script to be called after each parsed .rvt template or .tcl script
					  is executed
					</div><div style="margin-bottom:1.5ex ; padding .5ex">
					  In virtual hosts, this option overrides any AfterScript
					  definitions at the global level.
					</div></div></dd><dt><span class="term">
					<div class="cmdsynopsis" style="width:80%"><div style="border: 1px solid #282; margin:1ex ; padding:.4ex; padding-left: 0.8ex;   word-spacing:1ex "> <span style="font-family:monospace; font-weight: bold;">AfterEveryScript</span>  ?<span style="font-family:monospace; font-weight: bold;"><em class="replaceable"><code>script</code></em></span>?</div></div>
		      </span></dt><dd><div style="padding:4 ; margin-top:3 ; margin-bottom:3 ; width:75%"><div style="margin-bottom:1.5ex ; padding .5ex">
						AfterEveryScript is a script that is to
						be run anyway before requests processing ends. This script
						is therefore run both when the content generation script
						completes successfully and when its execution is interrupted
						by <a class="xref" href="abort_page.html" title="abort_page">abort_page</a>. The code in this script
						can understand whether it's running after the page was
						interrupted by calling <a class="xref" href="abort_page.html" title="abort_page">abort_page</a>	
						with the argument  ?<span style="font-family:monospace; font-weight: bold;">-aborting</span>?. The command
						will return 1 if an abort_page call took place 
						earlier in the request processing.
					</div></div></dd><dt><span class="term">
					<div class="cmdsynopsis" style="width:80%"><div style="border: 1px solid #282; margin:1ex ; padding:.4ex; padding-left: 0.8ex;   word-spacing:1ex "> <span style="font-family:monospace; font-weight: bold;">BeforeScript</span>  ?<span style="font-family:monospace; font-weight: bold;"><em class="replaceable"><code>script</code></em></span>?</div></div>
		      </span></dt><dd><div style="padding:4 ; margin-top:3 ; margin-bottom:3 ; width:75%"><div style="margin-bottom:1.5ex ; padding .5ex">
					  Script to be evaluated before each server parsed
					  (.rvt) page.  This can be used to create a standard
					  header, for instance.  It could also be used to load
					  code that you need for every page, if you don't want
					  to put it in a GlobalInitScript
					  ChildInitScript when you are first
					  developing a web site.
					  <div class="note" style="margin-left: 0.5in; margin-right: 0.5in;"><table border="0" summary="Note"><tr><td rowspan="2" align="center" valign="top" width="25"><img alt="[Note]" src="images/note.png"></td><th align="left">Note</th></tr><tr><td align="left" valign="top">
					    This code is evaluated at the global level, not
					    inside the request namespace where pages are
					    evaluated.
					  </td></tr></table></div>
					</div><div style="margin-bottom:1.5ex ; padding .5ex">
					  In virtual hosts, this option takes precedence over
					  the global setting.
					</div></div></dd><dt><span class="term">
					<div class="cmdsynopsis" style="width:80%"><div style="border: 1px solid #282; margin:1ex ; padding:.4ex; padding-left: 0.8ex;   word-spacing:1ex "> <span style="font-family:monospace; font-weight: bold;">CacheSize</span>  ?<span style="font-family:monospace; font-weight: bold;"><em class="replaceable"><code>size</code></em></span>?</div></div>
   			</span></dt><dd><div style="padding:4 ; margin-top:3 ; margin-bottom:3 ; width:75%"><div style="margin-bottom:1.5ex ; padding .5ex">
						  Sets the size of the internal page cache, where
						  <em class="replaceable"><code>size</code></em> is
						  the number of byte-compiled pages to be cached for
						  future use.  Default is
						  <span style="font-family:monospace"><span class="command"><strong>MaxRequestsPerChild</strong></span></span> / 5, or 50,
						  if <span style="font-family:monospace"><span class="command"><strong>MaxRequestsPerChild</strong></span></span> is 0.
						</div><div style="margin-bottom:1.5ex ; padding .5ex">
						  This option is completely global, even when using
						  separate per-virtual host interpreters.
						</div></div></dd><dt><span class="term">
					<div class="cmdsynopsis" style="width:80%"><div style="border: 1px solid #282; margin:1ex ; padding:.4ex; padding-left: 0.8ex;   word-spacing:1ex "> <span style="font-family:monospace; font-weight: bold;">ChildExitScript</span>  ?<span style="font-family:monospace; font-weight: bold;"><em class="replaceable"><code>script</code></em></span>?</div></div>
	      	</span></dt><dd><div style="padding:4 ; margin-top:3 ; margin-bottom:3 ; width:75%"><div style="margin-bottom:1.5ex ; padding .5ex">
					  Script to be evaluated when each Apache child
					  process exits. This is the logical place to clean
					  up resources created in ChildInitScript, 
					  if necessary.
					</div><div style="margin-bottom:1.5ex ; padding .5ex">
					  In virtual hosts, this script is run in addition to
					  any global childexitscript.
	              
	              When <span style="font-family:monospace"><span class="command"><strong>SeparateVirtualInterp</strong></span></span>
	              any <span style="font-family:monospace"><span class="command"><strong>ChildExitScript</strong></span></span> placed within a 
	              &lt;VirtualHost ...&gt;....&lt;/VirtualHost&gt;
	              will be that Virtual Host specific exit handler
					</div></div></dd><dt><span class="term">
					<div class="cmdsynopsis" style="width:80%"><div style="border: 1px solid #282; margin:1ex ; padding:.4ex; padding-left: 0.8ex;   word-spacing:1ex "> <span style="font-family:monospace; font-weight: bold;">ChildInitScript</span>  ?<span style="font-family:monospace; font-weight: bold;"><em class="replaceable"><code>script</code></em></span>?</div></div>
		      </span></dt><dd><div style="padding:4 ; margin-top:3 ; margin-bottom:3 ; width:75%"><div style="margin-bottom:1.5ex ; padding .5ex">
					  Script to be evaluated when each Apache child
					  process is initialized. This is the recommended
					  place to load modules, create global variables, open
					  connections to other facilities (such as databases)
					  and so on.
					</div><div style="margin-bottom:1.5ex ; padding .5ex">
					  In virtual hosts, this script is run in addition to
					  any global childinitscript. 
	                  When <span style="font-family:monospace"><span class="command"><strong>SeparateVirtualInterp</strong></span></span>
	                  any <span style="font-family:monospace"><span class="command"><strong>ChildInitScript</strong></span></span> placed within a 
	                  &lt;VirtualHost ...&gt;....&lt;/VirtualHost&gt;
	                  will be that Virtual Host specific ininitalization
					</div></div></dd><dt><span class="term">
					<div class="cmdsynopsis" style="width:80%"><div style="border: 1px solid #282; margin:1ex ; padding:.4ex; padding-left: 0.8ex;   word-spacing:1ex "> <span style="font-family:monospace; font-weight: bold;">ErrorScript</span>  ?<span style="font-family:monospace; font-weight: bold;"><em class="replaceable"><code>script</code></em></span>?</div></div>
	      	</span></dt><dd><div style="padding:4 ; margin-top:3 ; margin-bottom:3 ; width:75%"><div style="margin-bottom:1.5ex ; padding .5ex">
					  When Rivet encounters an error in a script, it
					  constructs an HTML page with some information about
					  the error, and the script that was being
					  evaluated. If an ErrorScript is
					  specified, it is possible to create custom error
					  pages.  This may be useful if you want to make sure
					  that users never view your source code.
					</div><div style="margin-bottom:1.5ex ; padding .5ex">
					  In virtual hosts, this option takes precedence over
					  the global setting.
					</div></div></dd><dt><span class="term">
					<div class="cmdsynopsis" style="width:80%"><div style="border: 1px solid #282; margin:1ex ; padding:.4ex; padding-left: 0.8ex;   word-spacing:1ex "> <span style="font-family:monospace; font-weight: bold;">ExportRivetNS</span>  (<span style="font-family:monospace; font-weight: bold;">yes</span> | <span style="font-family:monospace; font-weight: bold;">no</span>)</div></div>
			  	</span></dt><dd><div style="padding:4 ; margin-top:3 ; margin-bottom:3 ; width:75%"><div style="margin-bottom:1.5ex ; padding .5ex">
						Rivet commands are created within the ::rivet namespace. Setting
						this option mod_rivet places the whole command set on
						the export list of the ::rivet namespace, enabling your scripts to import
						them in a different namespace.
					</div><div style="margin-bottom:1.5ex ; padding .5ex">This option is, by nature, only available at the global level</div></div></dd><dt><span class="term">
					<div class="cmdsynopsis" style="width:80%"><div style="border: 1px solid #282; margin:1ex ; padding:.4ex; padding-left: 0.8ex;   word-spacing:1ex "> <span style="font-family:monospace; font-weight: bold;">HonorHeadRequests</span>  (<span style="font-family:monospace; font-weight: bold;">yes</span> | <span style="font-family:monospace; font-weight: bold;">no</span>)</div></div>
	      	</span></dt><dd><div style="padding:4 ; margin-top:3 ; margin-bottom:3 ; width:75%"><div style="margin-bottom:1.5ex ; padding .5ex">
					  If a HEAD requests is issued by the client Rivet detects
					  this case and sends back to the client a standard header 
					  response. If the real header has to be examined (e.g. 
					  for debugging) you can turn this options on. 
					</div><div style="margin-bottom:1.5ex ; padding .5ex">This option is only available at the global level</div></div></dd><dt><span class="term">
					<div class="cmdsynopsis" style="width:80%"><div style="border: 1px solid #282; margin:1ex ; padding:.4ex; padding-left: 0.8ex;   word-spacing:1ex "> <span style="font-family:monospace; font-weight: bold;">ImportRivetNS</span>  (<span style="font-family:monospace; font-weight: bold;">yes</span> | <span style="font-family:monospace; font-weight: bold;">no</span>)</div></div>
			  	</span></dt><dd><div style="padding:4 ; margin-top:3 ; margin-bottom:3 ; width:75%"><div style="margin-bottom:1.5ex ; padding .5ex">
						Rivet commands are created within the ::rivet namespace. Setting
						this option mod_rivet is told to place the whole command set on
						the export list of the ::rivet namespace (implicitly forcing also ExportRivetNS)
						and then importing the commands into the global namespace
					</div><div class="note" style="margin-left: 0.5in; margin-right: 0.5in;"><table border="0" summary="Note"><tr><td rowspan="2" align="center" valign="top" width="25"><img alt="[Note]" src="images/note.png"></td><th align="left">Note</th></tr><tr><td align="left" valign="top">
						This option is provided only for compatibility with existing code that assumes
						mod_rivet commands to reside in the global namespace it could be removed in
						future versions of Rivet. This option is only available at the global level
					</td></tr></table></div></div></dd><dt><span class="term">
					<div class="cmdsynopsis" style="width:80%"><div style="border: 1px solid #282; margin:1ex ; padding:.4ex; padding-left: 0.8ex;   word-spacing:1ex "> <span style="font-family:monospace; font-weight: bold;">MpmBridge</span>  ?<span style="font-family:monospace; font-weight: bold;"><em class="replaceable"><code>string</code></em></span>?</div></div>
	      	</span></dt><dd><div style="padding:4 ; margin-top:3 ; margin-bottom:3 ; width:75%"><div style="margin-bottom:1.5ex ; padding .5ex">
						This global only option tells mod_rivet which MPM bridge has
						to be loaded. The module attempt to interpolate the argument value
						<pre class="programlisting">bridge = apr_pstrcat(pool,RIVET_DIR,"/mpm/rivet_",rsc-&gt;mpm_bridge,"_mpm.so",NULL);</pre>
						Where RIVET_DIR is the location of the rivet libraries whose definition
						is controlled by the configure switch <span style="font-family:monospace"><span class="command"><strong>--with-rivet-target-dir=DIR</strong></span></span>.
						For example 
						<pre class="programlisting">RivetServerConf MpmBridge lazy</pre> will cause the
						rivet_lazy_mpm.so library module to be loaded.
					</div><div style="margin-bottom:1.5ex ; padding .5ex">
						If such library does not exists mod_rivet tries to check if such definition is actually
						the fully qualified path to such MPM bridge. If this fails the module causes the web server to stop
						with an error.
					</div></div></dd><dt><span class="term">
					<div class="cmdsynopsis" style="width:80%"><div style="border: 1px solid #282; margin:1ex ; padding:.4ex; padding-left: 0.8ex;   word-spacing:1ex "> <span style="font-family:monospace; font-weight: bold;">RequestHandler</span>  ?<span style="font-family:monospace; font-weight: bold;">request_handler_filename</span>?</div></div>
				</span></dt><dd><div style="padding:4 ; margin-top:3 ; margin-bottom:3 ; width:75%"><div style="margin-bottom:1.5ex ; padding .5ex">
						Filename of the request handler script. Overrides the default request handler. Can
						be virtual host specific
					</div><div class="note" style="margin-left: 0.5in; margin-right: 0.5in;"><table border="0" summary="Note"><tr><td rowspan="2" align="center" valign="top" width="25"><img alt="[Note]" src="images/note.png"></td><th align="left">Note</th></tr><tr><td align="left" valign="top">
						Note that changing this scripts requires the programmer to understand mod_rivet
						request processing model. See the <a class="link" href="processing.html" title="Apache Rivet HTTP Request Processing">request processing</a>
						manual page 
					</td></tr></table></div></div></dd><dt><span class="term">
			     <div class="cmdsynopsis" style="width:80%"><div style="border: 1px solid #282; margin:1ex ; padding:.4ex; padding-left: 0.8ex;   word-spacing:1ex "> <span style="font-family:monospace; font-weight: bold;">SeparateChannels</span>  (<span style="font-family:monospace; font-weight: bold;">yes</span> | <span style="font-family:monospace; font-weight: bold;">no</span>)</div></div>
			  </span></dt><dd><div style="padding:4 ; margin-top:3 ; margin-bottom:3 ; width:75%"><div style="margin-bottom:1.5ex ; padding .5ex">
	      			Internally mod_rivet creates a new Tcl channel (Rivet channel) which is configured
	      			as <span style="font-family:monospace"><span class="command"><strong>stdout</strong></span></span> and registered to each existing interpreter.
	      			There is no need of multiple channels in a single thread as each thread can 
	      			serve only one request at a time. But if you are deploying mod_rivet in a
	      			complex environment running unrelated applications developed by 
	      			different teams, it could be the case to have <span style="font-family:monospace"><span class="command"><strong>SeparateVirtualInterps</strong></span></span>
	      			set. If you want to enhance the environment separation you may also
	      			set <span style="font-family:monospace"><span class="command"><strong>SeparateChannels</strong></span></span> to force mod_rivet to create
	      			a channel per each Tcl interpreter thus enabling single application
	      			code to change the Rivet channel parameters without affecting other
	      			applications (even though changing the Tcl channel parameters is a rare 
	      			necessity). Setting this options increases the system overheads as each
	      			Rivet channel needs to allocate its own control structures and internal
	      			buffers.
	      		</div><div class="note" style="margin-left: 0.5in; margin-right: 0.5in;"><table border="0" summary="Note"><tr><td rowspan="2" align="center" valign="top" width="25"><img alt="[Note]" src="images/note.png"></td><th align="left">Note</th></tr><tr><td align="left" valign="top">
	      			This option is implemented in order to have fine-grained control over mod_rivet. In
	      			nearly all practical cases you won't need to change Rivet Channel (stdout) settings
	      			for different applications by calling <span style="font-family:monospace"><span class="command"><strong>fconfigure stdout ....</strong></span></span>. 
	      			This option is, by nature, only available at the global level and has effect only if 
	   		      also <span style="font-family:monospace"><span class="command"><strong>SeparateVirtualInterps</strong></span></span> is set
	   		   </td></tr></table></div></div></dd><dt><span class="term">
		     		<div class="cmdsynopsis" style="width:80%"><div style="border: 1px solid #282; margin:1ex ; padding:.4ex; padding-left: 0.8ex;   word-spacing:1ex "> <span style="font-family:monospace; font-weight: bold;">SeparateVirtualInterps</span>  (<span style="font-family:monospace; font-weight: bold;">yes</span> | <span style="font-family:monospace; font-weight: bold;">no</span>)</div></div>
		  		</span></dt><dd><div style="padding:4 ; margin-top:3 ; margin-bottom:3 ; width:75%"><div style="margin-bottom:1.5ex ; padding .5ex">
	      		  If on, Rivet will create a separate Tcl interpreter
	      		  for each Apache virtual host.  This is useful in an
	      		  ISP type situation where it is desirable to separate
	      		  clients into separate interpreters, so that they
	      		  don't accidentally interfere with one another.
	      		</div><div class="note" style="margin-left: 0.5in; margin-right: 0.5in;"><table border="0" summary="Note"><tr><td rowspan="2" align="center" valign="top" width="25"><img alt="[Note]" src="images/note.png"></td><th align="left">Note</th></tr><tr><td align="left" valign="top">
	   		      This option is, by nature, only available at the
	   		      global level. By enabling <span style="font-family:monospace"><span class="command"><strong>SeparateVirtualInterps</strong></span></span>
	   		      you must rely only on <span style="font-family:monospace"><span class="command"><strong>ChildInitScript</strong></span></span> to
	   		      initialize the interpreters. Don't expect the 
	   		      initialization done in <span style="font-family:monospace"><span class="command"><strong>ServerInitScript</strong></span></span> and 
	   		      <span style="font-family:monospace"><span class="command"><strong>GlobalInitScript</strong></span></span> to be handed down to the
	   		      slave interpreters that are private to each configured 
	   		      virtual host.
	   		   </td></tr></table></div></div></dd><dt><span class="term">
   				<div class="cmdsynopsis" style="width:80%"><div style="border: 1px solid #282; margin:1ex ; padding:.4ex; padding-left: 0.8ex;   word-spacing:1ex "> <span style="font-family:monospace; font-weight: bold;">ServerInitScript</span>  ?<span style="font-family:monospace; font-weight: bold;"><em class="replaceable"><code>script</code></em></span>?</div></div>
   			</span></dt><dd><div style="padding:4 ; margin-top:3 ; margin-bottom:3 ; width:75%"><div style="margin-bottom:1.5ex ; padding .5ex">
				    	The directive <span style="font-family:monospace"><span class="command"><strong>ServerInitScript</strong></span></span> plays a special
				    	role since the script runs within the master interpreter,
				    	an interpreter created when the Apache web server is setting up
				    	for answering requests and before worker processes/threads are
				    	started. During this stage Apache is still running as a 
				    	single process, so this is the right place for doing 
				    	initialization of systems such as any IPC systems.
   				</div><div style="margin-bottom:1.5ex ; padding .5ex">
		   			On systems with the capability of forking child processes
		   			the Apache web server can run the prefork MPM. By default 
		   			rivet selects the prefork brigde which makes mod_rivet work
		   			the way mod_rivet 2.x work.
		   			In a web server with this set up child processes inherit a copy of the 
		   			address space from the parent processes and therefore
		   			Tcl interpreters too are replicated into the child address space. 
		   			If SeparateVirtualInteprs is Off child processes run with a
		   			copy of the Tcl master interpreter and ServerInitScipt
		   			thus provides a way to initialize only once  
		   			any subsequent Tcl interpreters created by fork calls as each
		   			of them are clones of the master interpreter.
		   		</div></div></dd><dt><span class="term">
   				<div class="cmdsynopsis" style="width:80%"><div style="border: 1px solid #282; margin:1ex ; padding:.4ex; padding-left: 0.8ex;   word-spacing:1ex "> <span style="font-family:monospace; font-weight: bold;">SingleThreadExit</span>  (<span style="font-family:monospace; font-weight: bold;">yes</span> | <span style="font-family:monospace; font-weight: bold;">no</span>)</div></div>
   			</span></dt><dd><div style="padding:4 ; margin-top:3 ; margin-bottom:3 ; width:75%"><div style="margin-bottom:1.5ex ; padding .5ex">
						The Tcl <span style="font-family:monospace"><span class="command"><strong>exit</strong></span></span> command has a simple implementation that
						eventually calls Tcl_Exit (which in turn calls stdlib's exit) that forces
						the immediate deletion of all threads in a process. This behavior would be
		   			unacceptable with the worker MPM and worker bridge which are fundamentally
		   			threaded. 
		   			Therefore Rivet shadows the Tcl <span style="font-family:monospace"><span class="command"><strong>exit</strong></span></span> command with
		   			<span style="font-family:monospace"><span class="command"><strong>::rivet::exit</strong></span></span> which calls a designated function in
		   			the running bridge. The prefork bridge simply prepares the child process
		   			to terminate, whereas the worker bridge is behavior controlled by this option.
		   			<div class="orderedlist"><ol class="orderedlist" type="1"><li class="listitem">If SingleThreadExit is set (default) each thread behaves
		   				individually and terminates after running the ChildExitScript and deleting 
		   				its Tcl interpreters</li><li class="listitem">If SingleThreadExit is <span style="font-family:monospace"><span class="command"><strong>No</strong></span></span> the worker bridge notifies all threads
		   				to exit and then calls Tcl_Exit</li></ol></div>
		   			The latter option might be useful in cases where an application is using
		   			an improperly developed Tcl extension which might cause a child process to crash when
		   			calling Tcl_DeleteInterp.
					</div><div class="note" style="margin-left: 0.5in; margin-right: 0.5in;"><table border="0" summary="Note"><tr><td rowspan="2" align="center" valign="top" width="25"><img alt="[Note]" src="images/note.png"></td><th align="left">Note</th></tr><tr><td align="left" valign="top">
						The default is <span style="font-family:monospace"><span class="command"><strong>No</strong></span></span> for the prefork bridge (loaded by default if the server
						runs the prefork MPM) and <span style="font-family:monospace"><span class="command"><strong>true</strong></span></span> for the worker and lazy bridges
					</td></tr></table></div></div></dd><dt><span class="term">
					<div class="cmdsynopsis" style="width:80%"><div style="border: 1px solid #282; margin:1ex ; padding:.4ex; padding-left: 0.8ex;   word-spacing:1ex "> <span style="font-family:monospace; font-weight: bold;">UploadDirectory</span>  ?<span style="font-family:monospace; font-weight: bold;"><em class="replaceable"><code>directory</code></em></span>?</div></div>
		      </span></dt><dd><div style="padding:4 ; margin-top:3 ; margin-bottom:3 ; width:75%"><div style="margin-bottom:1.5ex ; padding .5ex">Directory to place uploaded files.</div><div style="margin-bottom:1.5ex ; padding .5ex">
			  			In virtual hosts, this option takes precedence over
			  			the global setting.
					</div></div></dd><dt><span class="term">
					<div class="cmdsynopsis" style="width:80%"><div style="border: 1px solid #282; margin:1ex ; padding:.4ex; padding-left: 0.8ex;   word-spacing:1ex "> <span style="font-family:monospace; font-weight: bold;">UploadFilesToVar</span>  (<span style="font-family:monospace; font-weight: bold;">yes</span> | <span style="font-family:monospace; font-weight: bold;">no</span>)</div></div>
	      	</span></dt><dd><div style="padding:4 ; margin-top:3 ; margin-bottom:3 ; width:75%"><div style="margin-bottom:1.5ex ; padding .5ex">
					  This option controls whether it is possible to
					  upload files to a Tcl variable.  If you have a size
					  limit, and don't have to deal with large files, this
					  might be more convenient than sending the data to a
					  file on disk.
					</div></div></dd><dt><span class="term">
					<div class="cmdsynopsis" style="width:80%"><div style="border: 1px solid #282; margin:1ex ; padding:.4ex; padding-left: 0.8ex;   word-spacing:1ex "> <span style="font-family:monospace; font-weight: bold;">UploadMaxSize</span>  ?<span style="font-family:monospace; font-weight: bold;"><em class="replaceable"><code>size</code></em></span>?</div></div>
				</span></dt><dd><div style="padding:4 ; margin-top:3 ; margin-bottom:3 ; width:75%"><div style="margin-bottom:1.5ex ; padding .5ex">Maximum size for uploaded files.</div><div style="margin-bottom:1.5ex ; padding .5ex">
					  In virtual hosts, this option takes precedence over
					  the global setting.
					</div></div></dd></dl></div></div></div><div class="navfooter"><hr><table width="100%" summary="Navigation footer"><tr><td width="40%" align="left"><a accesskey="p" href="cmake.html"><img src="images/prev.png" alt="Prev"></a> </td><td width="20%" align="center"> </td><td width="40%" align="right"> <a accesskey="n" href="processing.html"><img src="images/next.png" alt="Next"></a></td></tr><tr><td width="40%" align="left" valign="top">Building Rivet 3.2 with CMake </td><td width="20%" align="center"><a accesskey="h" href="index.html"><img src="images/home.png" alt="Home"></a></td><td width="40%" align="right" valign="top"> Apache Rivet HTTP Request Processing</td></tr></table></div></body></html>