<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
    <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
    <title>Rivet 2.1: Release Notes and Known Problems</title>
    <link rel="stylesheet" href="../templates/wondrous/styles.css" type="text/css" />
</head>

<body>
    <div id="container">
        <div id="header">
            <h1><a href="../index.html">Rivet</a></h1>
            <h2 id="slogan">Webscripting for Tcl'ers</h2>
            <div class="clear"></div>
        </div>
        <div id="body">
            <div id="content">
                <h2>Rivet 2.1: Release Notes and Known Problems</h2>
                <div>
    <div class="sez">
        <h4>Download</h4>
        <p>
                    Rivet 2.1 is available for download from ASF mirror sites. Check the 
                    <a href="download.html">download page</a>

 for information about 
                    downloading the source code, rpm files or packages for SuSE, 
                    Redhat, Debian and Ubuntu (packages for SuSE and Redhat are available thanks to 
                    Harald Oehlmann).
                                    </p>
        <p>
                    Code integrity for this release can be checked using the 
                    public keys in the <a href="http://www.apache.org/dist/tcl/KEYS">KEYS</a>

 file.
                                    </p>
        <p>
                    Rivet 2.1 works with the Apache Webserver version 2.x (running the 
                    <strong>prefork</strong>

 MPM) and requires Tcl &gt;= 8.5.11
                                    </p>
    </div>
    <div class="sez">
        <h4>Rivet 2.1.3 Release Notes</h4>
        <ul>
            <li>installation target 'make install' restored to its previous
                        functionality (hence the whole module and packages are installed)
                        by making it depend on two targets <i>install-binaries</i>

 and
                        <i>install-packages</i>
            </li>
            <li>New variant 'parse -string' to parse templates stored in strings</li>
            <li>Improved safety of command <strong>::rivet::parray</strong>

 
                    by escaping SGML characters in the output                            </li>
            <li>Improved detection of <b>SELECT</b>

 queries in <strong>::DIO::Mysql</strong>
            </li>
            <li>Various fixes in package <b>Calendar</b>
            </li>
            <li>Changed names of deprecated variables in autotools scripts</li>
        </ul>
    </div>
    <div class="sez">
        <h4>Rivet 2.1.2 Release Notes</h4>
        <ul>
            <li>various bug fixes to form2.tcl</li>
            <li>documentation improved for the form package and for the installation process</li>
            <li>libtool/autotool scripts update</li>
            <li>mod_rivet.c: fixed call to panic that refused to compile with Tcl8.6</li>
            <li>apache request: relaxed restrictions on HTTP methods accepted</li>
            <li>binary module/libraries and Tcl packages installations were split. 
		   				Rivet installation is a two step process now. This should make possible
		   				to create arch independent archives/packages of code written in Tcl and
		   				shipped with Rivet
		   			</li>
        </ul>
    </div>
    <div class="sez">
        <h4>Rivet 2.1.1 Release Notes</h4>
        <h5>Bug Fixes</h5>
        <ul>
            <li>
                       Fixed bug #54162: mod_rivet is now coexisting with mod_websh
                    </li>
            <li>
                        Checks on 'Content-Type' relaxed (Bug #53661). Rivet is now only
                        checking if such fields is the headers table.
                    </li>
            <li>
                        Rivet is now also handling PUT and DELETE requests (Bug #53661)
                    </li>
            <li>
                        New command ::rivet::xml for XML fragments composition
                    </li>
        </ul>
    </div>
    <div class="sez">
        <h4>Rivet 2.1.0 Release Notes</h4>
        <h5>New commands and Directives</h5>
        <p>
                    Starting with rivet version 2.1 the whole set of commands was moved into the 
                    <strong>::rivet</strong>

 namespace. For compatibility with existing software
                    commands are by default in the <strong>::rivet</strong>

 namespace export list 
                    and automatically imported into the global namespace. 
                    You can change this behaviour in two ways:
                                    </p>
        <ul>
            <li>
                        By disabling the automatic import from the <strong>::rivet</strong>


                        namespace configuring the build system with the 
                        <em>--disable-import-rivet-commands</em>

 switch
                                                </li>
            <li>
                        By disabling the export of the commands, thus forcing scripts to
                        use the fully qualified name of a command using configure's 
                        <strong>--disable-rivet-commands-export</strong>

 argument
                                                </li>
        </ul>
        <p>
                    A new <strong>RivetServerInit</strong>

 directives was introduced. 
                    <strong>RivetServerInit</strong>

	accepts as argument a Tcl script to be run
                    during the initialization stage of the webserver. This phase takes places 
                    before the child processes are forked. More details are available in the manual.
                                    </p>
        <p>
                    A new <strong>AfterEveryScript</strong>

 directive specifies a new class of 
                    configuration scripts. An <strong>AfterEveryScript</strong>

 directive tells
                    Rivet what code has to be executed at every request completion, either when 
                    a request processing was successful or an abort condition was handled 
                    by an <strong>AbortScript</strong>

 directive.
                                    </p>
        <p>
                    The new command <strong>::rivet::inspect</strong>

 provides deeper introspection
                    in the configuration of a module.
                                    </p>
        <h5>New switches for the <quote>configure</quote>

 script                    </h5>
        <p>
                    Some Rivet configuration defaults can be changed running the 
                    <i>configure</i>

 script passing the following arguments. 
                                    </p>
        <ul>
            <li>--enable-virtual-interps-separation</li>
            <li>--with-upload-dir=DIR</li>
            <li>--with-post-max=BYTES</li>
            <li>--disable-upload-var</li>
        </ul>
        <h5>
						Recent Bug Fixes
					</h5>
        <p>
						Test Suite 
						<ul>
                <li>User and Group directives removed from the configuration file
	    					template to make test suite independent from the command 'id' output from which 
	    					the values for this parameters were inferred (Bug #53396)</li>
            </ul>
        </p>
        <p>
						mod_rivet.c.
						<ul>
                <li>Add UploadDirectory to the list of handled options for RivetUserConf</li>
                <li>The module returns now a HTTP_INTERNAL_SERVER_ERROR when a <b>::request</b>


		    				namespace cannot be created                                    </li>
            </ul>
        </p>
        <p> 
						DIO Package bug fixes
						<ul>
                <li>
								Improved DIO support for Sqlite fixes several bugs.
							</li>
                <li>
								Fixed secs computation made by dio_Mysql when handling timestamp fields.
							</li>
                <li>
								Fixed wrong declaration of 'insert' subcommand in page manual (Bug #53670)
							</li>
                <li>
								Fixed method makeDBFieldValue in class Oracle (Bug #53703)
							</li>
                <li>
								Method 'count' failed when no keyfield was set.
							</li>
                <li>
								Index riv_sess_cache_ix had a incomplete unique key definition that missed the 
								'package_' column (fixes bug #54063)
							</li>
            </ul>
        </p>
        <p>
						New package form 2.0 added with new methods and several fixes including:
						<ul>
                <li>	
								Workaround to avoid wrong parsing of form data when parameter
		 						values have spaces in them
							</li>
                <li>
								Fixed problem with variable clash in constructor. Also removed unneeded [expr ...] in conditions
		 						that prevented efficient code handling by the byte compiler (Closes bug #52650)
							</li>
            </ul>
        </p>
    </div>
</div>



                <div class="contentbottom">
                    
                </div>
            </div>

            <div class="sidebar">
                <ul>
                    <li id="news">
    <h4>News</h4>
    <ul class="blocklist">
        <li class="navitem">
            <a title="Tcl and Rivet as a replacement of PHP for web scripting" class="extern" href="https://www.youtube.com/watch?v=iagBj3xCExQ">
                12 Dec 2013: Introductory video to Apache/Rivet
                </a>
        </li>
        <li class="navitem">
            <a href="rn-2-1.html">1 Oct 2013: Rivet 2.1.3 released</a>
        </li>
        <li class="navitem">
            <a href="rn-2-0.html">1 Dec 2012: Rivet 2.0.6 released</a>
        </li>
    </ul>
</li>
 
                </ul> 
                <ul>
                    <li id="home">
    <h4>Rivet</h4>
    <ul class="blocklist">
        <li class="navitem">
            <a title="A home for Rivet" href="../index.html">Rivet Homepage</a>
        </li>
        <li class="navitem">
            <a title="Home of Apache Tcl related stuff" target="asf" href="http://tcl.apache.org/">Apache Tcl Home</a>
        </li>
        <li class="navitem">
            <a title="Getting Rivet" href="download.html">Getting Rivet</a>
        </li>
        <li class="navitem">
            <a title="Hello World!" href="hello_world.html">Examples</a>
        </li>
        <li class="navitem">
            <a title="The Rivet development team" href="about.html">About Us - Contact</a>
        </li>
    </ul>
</li>
<li id="tcl">
    <h4>Tcl/Tk</h4>
    <ul class="blocklist">
        <li class="navitem">
            <a title="The Tcl Developer Xchange" target="tclxchange" class="extern" href="http://www.tcl.tk/">
                The Tcl/Tk Language
                </a>
        </li>
        <li class="navitem">
            <a title="Tcl community wiki site" target="tclwiki" class="extern" href="http://wiki.tcl.tk/">Tcl'ers Wiki</a>
        </li>
    </ul>
</li>
<li id="support">
    <h4>Support</h4>
    <ul class="blocklist">
        <li class="navitem">
            <a title="Apache Rivet Bugzilla" class="extern" href="https://issues.apache.org/bugzilla/buglist.cgi?quicksearch=Rivet">Bug Reports</a>
        </li>
    </ul>
</li>
<li id="manual">
    <h4>Manuals</h4>
    <ul class="blocklist">
        <li class="navitem">
            <a title="Rivet Manual" target="rivetman2.0" href="http://tcl.apache.org/rivet/manual2.0/">Rivet 2.0 Manual</a>
        </li>
        <li class="navitem">
            <a title="Rivet Manual" target="rivetman2.1" href="http://tcl.apache.org/rivet/manual2.1/">Rivet 2.1 Manual</a>
        </li>
    </ul>
</li>
 
                </ul> 
                <ul>
                     
                </ul> 
            </div>
            <div class="clear"></div>
        </div>
    </div>
    <div id="footer">
        <div class="footer-content">
            <p><a href="http://www.apache.org/">Apache Software Foundation</a> | Design by <a href="http://www.spyka.net">Free CSS Templates</a> | <a href="http://www.justfreetemplates.com">Free Web Templates</a></p>
        </div>
    </div>
    <div style="text-align: center; font-size: 0.75em;">Design downloaded from <a href="http://www.freewebtemplates.com/">free website templates</a>.</div></body>
</html>

