Re: SCGI + Quixote, Location / ?

Mike Orr <[email protected]>
Newsgroups gmane.comp.web.quixote.user
Message-ID <[email protected]>
David Binger wrote:

> On Aug 10, 2005, at 7:20 PM, [email protected] wrote:
>
>> Actually it would have to be like this:
>>
>>         # In publish.Publisher.try_publish()
>>         path = request.get_environ('PATH_INFO', '')
>>         if not path:
>>             return redirect(request.get_environ('SCRIPT_NAME')+'/',  
>> True)
>>
>> Tested on Apache 2.0.52, scgi 1.4, Quixote 2.1.
>
>
> I think the case in question puts the entire path in the SCRIPT_NAME
> on every request.    Under those conditions, the strategy you suggest
> can't work since the PATH_INFO would still be empty after a redirect.
>
> Does your test push requests through this redirect?


I don't understand the question.  I go to /rl, it redirects to /rl/, 
which in my app redirects to /rl/login because the user isn't logged 
in.  If I type /rl/, it redirects to /rl/login, and the page shows 
properly, with stylesheet and logo which are StaticFile's.


> Is mod_scgi's behavior different from what I am assuming?
>

 From mod_scgi.c (SCGI 1.5):

    if (r->path_info) {
        int path_info_start = find_path_info(r->uri, r->path_info);
        add_header(t, "SCRIPT_NAME", apr_pstrndup(r->pool, r->uri,
                                                  path_info_start));
        add_header(t, "PATH_INFO", r->path_info);
    }
    else {
        /* skip PATH_INFO, don't know it */
        add_header(t, "SCRIPT_NAME", r->uri);
    }

So it tries to handle either case.

 From quixote.scgi_server.QuixoteHandler.handle_connection():

        if self.script_name is not None:
            # mod_scgi doesn't know SCRIPT_NAME :-(
            prefix = self.script_name
            path = env['SCRIPT_NAME']
            assert path[:len(prefix)] == prefix, (
                "path %r doesn't start with script_name %r" % (path, 
prefix))
            env['SCRIPT_NAME'] = prefix
            env['PATH_INFO'] = path[len(prefix):] + env.get('PATH_INFO', '')

This looks like it tries to find either case too.  I didn't look at what 
SCRIPT_NAME and PATH_INFO were before this mangling. 

Either there's one problem or two.  The 
missing-trailing-slash-for-home-page problem is happening in any case.  
That's what the original poster mentioned I thought, and it also happens 
to me.  If PATH_INFO is always blank and .handle_connection() doesn't 
fix it, Quixote wouldn't work at all.  That would be a separate 
problem.   I think mod_scgi doesn't set PATH_INFO, but I haven't checked 
it specifically.  I can check it tomorrow if necessary.

-- Mike Orr <[email protected]>
lmpx.com only provides a reader for public news (NNTP) servers. It is not affiliated with the servers or forums shown here and is not responsible for the content of articles, which is written by their respective authors.