Graham Dumpleton
grahamd at dscpl.com.au
Thu Oct 7 18:10:49 EDT 2004
On Oct 07 23:50, berry groenendijk <berry.groenendijk at gmail.com> wrote: > > Subject: Re: [mod_python] Udate python modules without restarting Apache > > My handler is servlet.py. The excellent module build by Daniel > Popowich. I do not place this servlet.py in the mod_python > installation directory, but I have the servlet.py in the root of my > website. In a .htaccess file I have the following entries: > > PythonAutoReload On > SetHandler mod_python > PythonHandler servlet > PythonDebug on > > I think the problem is in the servlet.py. Because, as soon as I touch > this file I get this error: > > ValueError: index is not a subclass of Servlet (in E:/Program > Files/Apache Group/Apache2/htdocs/MySite/index.mps) > > Before I touched servlet.py the index file loaded perfectly. > Apparently apache tried reloading the servlet file effectively > creating a new Servlet object in memory. Other pages that have already > created in memory and that are subclasses from Servlet have now > apparently lost their 'parent'. > > Any suggestions how to solve this? Hmmm, I haven't tried MPS as yet, looks like it might be time to do so in order to understand it a bit better. One of the issues with reloading that isn't obvious is that it doesn't actually clean out the namespace of the existing loaded module before loading it again. In effect it lays the reloading module back over the top of the old one. You can thus still have strange things happen if you keep state in global variables or remove methods. The easiest to explain is the removal of a method from a module which is imported by mod_python.publisher. Even though the method is removed from the code file, when it reloads the code module it doesn't actually delete the existing method, so it still exists and can still be accessed by a request. Anyway, I'll get down MPS and have a bit of a play. -- Graham Dumpleton (grahamd at dscpl.com.au)
|