On 5 March 2011 06:55, bc <[email protected]> wrote:
>
>
> On Mar 3, 5:08 pm, Graham Dumpleton <[email protected]>
> wrote:
>> Okay, that one specific case will cause sys.path to grow.
>>
>> What happens is that on very first load of WSGI script file, if it
>> fails at global level it will log error and then throw what was loaded
>> away and so will look as if never loaded. If the script isn't fixed
>> then every subsequent request will do the same thing and because
>> adding to sys.path is cumulative and before where the error is, it
>> will keep growing.
>>
>> It is hard to protect against that case in mod_wsgi. I should document
>> this specific case as a sub not in that reloading source code
>> document.
>>
>
> Interesting. Are you sure that protecting against doing cumulative
> actions at global scope in the wsgi file is enough? If you do an
> import, for example, seems like it could do fairly arbitrary things at
> global scope, which one might not know about.

It is only a problem for failed import. If the import succeeds then
the code for that module isn't executed again and the cached module is
instead used.

> What led to my finding this was an inability to import
> django.core.handlers.wsgi, which prompted me to start watching
> sys.path. I still don't understand why I wasn't able to import. The
> correct path was in sys.path (multiple times), but the wsgi script
> consistently failed with an exception saying there was no such module
> (which I could only discover by trapping the exception during the
> import and dumping it to a file). I suspect now that previous failures
> had mucked up something else in the global context. It seemed to be
> persistent across "reloads" of the wsgi script: that is, editing the
> file, which should have caused a reload, didn't clear the issue.
> Restarting apache did clear it.
>
> If errors at this level are hard to catch from mod_wsgi, could they be
> caught in the script itself? E.g. could you put the whole script in a
> "try" block, and on exception do something to cause wsgi to ditch the
> global context and restart?

The user could do that, but would be hard to know what to undo.

Graham

-- 
You received this message because you are subscribed to the Google Groups 
"modwsgi" group.
To post to this group, send email to [email protected].
To unsubscribe from this group, send email to 
[email protected].
For more options, visit this group at 
http://groups.google.com/group/modwsgi?hl=en.

Reply via email to