blob: 2adc27ae76ff1537568e73fbacf4508c5ffab478 [file] [log] [blame]
<html><head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8"><title>Apache Rivet 3.0 Configuration</title><link rel="stylesheet" type="text/css" href="rivet.css"><meta name="generator" content="DocBook XSL Stylesheets V1.79.1"><link rel="home" href="index.html" title="Apache Rivet 3.0"><link rel="up" href="index.html" title="Apache Rivet 3.0"><link rel="prev" href="cmake.html" title="Building Rivet 3.0 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.0 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.0 Configuration</h2></div></div></div><div class="section"><div class="titlepage"><div><div><h3 class="title"><a name="idm45412677598400"></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="idm45412677567184"></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></td></tr><tr><td>AfterScript</td><td>X</td><td>X</td><td>X</td><td>X</td><td></td></tr><tr><td>AfterEveryScript</td><td>X</td><td>X</td><td>X</td><td>X</td><td></td></tr><tr><td>BeforeScript</td><td>X</td><td>X</td><td>X</td><td>X</td><td></td></tr><tr><td>CacheSize</td><td></td><td></td><td>X</td><td></td><td></td></tr><tr><td>ChildExitScript</td><td></td><td></td><td>X</td><td></td><td></td></tr><tr><td>ChildInitScript</td><td></td><td></td><td>X</td><td></td><td></td></tr><tr><td>ErrorScript</td><td>X</td><td>X</td><td>X</td><td>X</td><td></td></tr><tr><td>ExportRivetNS</td><td></td><td></td><td>X</td><td></td><td></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></td><td></td></tr><tr><td>HonorHeaderOnlyRequests</td><td></td><td></td><td>X</td><td></td><td></td></tr><tr><td>MpmBridge</td><td></td><td></td><td>X</td><td></td><td>global setting</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 setting</td></tr><tr><td>SeparateVirtualInterps</td><td></td><td></td><td>X</td><td></td><td>global setting</td></tr><tr><td>ServerInitScript</td><td></td><td></td><td>X</td><td></td><td></td></tr><tr><td>UploadDirectory</td><td></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></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 you tell mod_rivet to place the whole command set on
the export list of 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;">HonorHeaderOnlyRequests</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, 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;">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 you tell mod_rivet to place the whole command set on
the export list of namespace (implicitly forcing also ExportRivetNS)
and then importing the commands on the namespace export list 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's utterly discouraged to
use it and it could be removed in future versions of Rivet
This option is, by nature, 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 string argument is interpreted
first as a name of an MPM bridge and it's interpolated in the
string
<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 configuration argument <span style="color: red">&lt;term&gt;--with-rivet-target-dir=DIR&lt;/term&gt;</span>.
For example
<pre class="programlisting">RivetServerConf MpmBridge lazy</pre> will cause the
rivet_lazy_mpm.so library module to be loaded. If such library does not exists
mod_rivet tries to check if such definition is 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;">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.0 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>