Hi,
  Thanks! That moved my crash significantly further into my
code, where I need to translate another tclhttpd construct.

  Moving Forwards!
  
  Happy Tcl'ing,
  Clif

On Wed, Jun 10, 2026 at 10:17:47AM +0200, Massimo Manghi wrote:
> Hi Clif
> 
> by default Rivet handles every request running the request handler script in
> rivet/default_request_handler.tcl
> 
> The very first command of this script is
> 
> ::Rivet::initialize_request
> 
> (located in rivet/init.tcl.in) which is simply
> 
> proc ::Rivet::initialize_request {} {
>     catch { namespace delete ::request }
> 
>     namespace eval ::request {}
> 
>     proc ::request::global {args} {
>         foreach arg $args {
>             uplevel "::global ::request::$arg"
>         }
>     }
> }
> 
> therefore in order to have rivet script (either .tcl or .rvt files) Tcl On
> Track should run this procedure before any code is evaluated and on every
> request
> 
>  -- Massimo
> 
> 
> On 6/10/26 04:37, Clif Flynt wrote:
> > Hi,
> >    I'm trying to port Tcl On Track, the web framework I demonstrated at
> > the US Tcl Conference several years ago from TclHttpd to Rivet.
> > 
> >    I made heavy use of TclHttpd's Direct_Url construct in that code. I
> > think I've found a way to implement Direct_Url using a custom error
> > handler, but I'm running into a glitch accessing cookies.
> > 
> >    The line in httpd.conf is:
> > 
> >    ErrorDocument 404 "/rivet/error.tcl"
> > 
> >    The critical code in error.tcl is:
> > 
> > catch {
> > puts "<br>ERROR: INSTANCES OF ANNOUNCE '[info class instance announce]'<br>"
> > announce::show [string range $st 1 end]
> > } xx
> > puts "XX2: $xx<br>"
> > 
> >    This generates:
> > ERROR: INSTANCES OF ANNOUNCE ''
> > 
> >    And the error return shown later in this massive missive.
> > 
> >    Here's an excerpt of the code in my .tcl script that's invoked when
> > the error handler script calls announce::show.
> > 
> > puts "COOKIE: [lsort [namespace children ::]] <br>"
> > puts "COOKIE Proc: [lsort [info proc request::*]] <br>"
> > puts "COOKIE vars: [lsort [info vars request::*]] <br>"
> > puts "COOKIE cmds: [lsort [info commands request::*]] <br>"
> > catch {
> >      set sessionID [cookie get sessionID]
> > }
> > puts "ERROR $::errorInfo"
> > 
> > This generates the following output:
> > 
> > COOKIE: ::Rivet ::abstract ::announce ::auto_mkindex_parser ::base64 ::blog 
> > ::centerLogo ::changePwd ::cmdline ::css ::debugPg ::def ::file ::fileutil 
> > ::folders ::form ::form2 ::formCSS ::formH5 ::gpg ::html ::html8 
> > ::iconStrip ::itcl ::layout ::leftBelowLogo ::leftLogo ::login ::md5 
> > ::msgcat ::ncgi ::newuser ::oo ::pkg ::registration ::request ::rightLogo 
> > ::rightLogoCenterMenuSlideShow ::rightLogoLowerMenu 
> > ::rightLogoLowerMenuSlideShow ::rivet ::site ::story ::tagTweak ::tcl 
> > ::tdbc ::track ::upperLower ::uri ::zlib
> > COOKIE Proc:
> > COOKIE vars:
> > COOKIE cmds:
> > 
> > ERROR: invalid command name "::request::global"
> >    while executing "::request::global RivetCookies"
> >      (procedure "cookie" line 26)
> >      invoked from within "cookie get sessionID"
> > 
> > XX2: invalid command name "::request::global"
> > invalid command name "::request::global" while executing
> > "::request::global RivetCookies"
> >      (procedure "cookie" line 26)
> >    invoked from within "cookie get sessionID"
> >      (procedure "track::getUserInfo" line 8)
> >    invoked from within "track::getUserInfo dbRtn"
> >      (procedure "site::top" line 19)
> >    invoked from within "site::top -title $path"
> >      (procedure "announce::show" line 62)
> >    invoked from within "announce::show [string range $st 1 end]"
> > 
> > ...
> > 
> >    I'm guessing that the fact that I'm never invoking a .rvt script
> > is causing parts of Rivet to not be initialized.
> > 
> >    I tried invoking a rivet script
> >    ErrorDocument 404 "/rivet/error.rvt"
> > 
> >    with the original file's data enclosed inside <? ... ?>.
> >    The behavior was the same as using the .tcl extension.
> >    Another concern is that the [info class instance announce] command
> > returns an empty string, though an announce object was created on the
> > page that tried to invoke the Direct_Url look-alike.
> >    Is this a result of Apache giving me a new interpreter for each
> > page that gets loaded?
> 
> 
> 
> > 
> >    I'm using BSD, wish8.6 and Rivet from the BSD depository.
> > FreeBSD 15.0-RELEASE (GENERIC) releng/15.0-n280995-7aedc8de6446
> > 
> >    Thanks for any pointers or suggestions,
> >    Clif

-- 
... Clif Flynt ... http://www.cflynt.com ... [email protected] ....
. Tcl/Tk: A Developer's Guide (4'th edition) - Morgan Kauffman  .
.............. Promised Rewards - Dark Myth Press ...............
.......... 5 Minutes in Hotel Stormcove - Atthis Arts ...........
.........  Unidentified Funny Objects, #7, #8, #9, #10  .........






---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]

Reply via email to