|
Dirk van Oosterbosch, IR labs
labs at ixopusada.com
Sun Sep 4 13:08:25 EDT 2005
On 2-sep-05, at 03:39, Graham Dumpleton wrote:
>>
>> <IfModule mod_python.c>
>> PythonPath "sys.path + ['/var/www/python/']"
>> PythonTransHandler translate
>
> Try adding here in addition to the above:
>
> AddHandler mod_python .py
> PythonHandler main
>
> Ie., rather than trying to use req.add_handler(). What happens then?
Well, I guess it works in the end.
Sorry, my bad.
I mixed up two versions of main.py I had laying around. (I modified
my translate.py so the req.filename becomes main_from_trans.py , but
didn't use that name in the PythonHandler directive).
It does strike me as strange however, that I have to use PythonHander
python_main_file in the apache configuration, when I have the
transhandler decide that it should use python_main_file.py as filename.
That would mean I can't make the transhandler fork its behavior between
different python files as the ones that should become the filename and
should be handled in the next phase (handler that is). (Unless I have
it fork to different directories and use different <Directory>
configurations, of course)
...
I mean something like:
-----translate.py:
def transhandler(req):
...
if fork == 1:
req.filename = "/var/www/python/main_alternative_a.py"
else:
req.filename = "/var/www/python/main_alternative_b.py"
return apache.OK
-----
wouldn't work because I would have to say
<IfModule mod_python.c>
PythonPath "sys.path + ['/var/www/python/']"
PythonTransHandler translate
</IfModule>
<Directory "/var/www/python">
AddHandler mod_python .py
PythonHandler main_alternative_a ---OR--- PythonHandler
main_alternative_b
</Directory>
...
Also I found out that if I add
req.add_handler("PythonHandler", "main")
to translate.py it executes the handler from main.py twice (you get a
double html file) , but only if it can successfully do the first one
(set by req.filename = "/var/www/python/main.py" .
But at least I got transhandler working finally.
One last question though on performance and recommendation on design.
I still see those two options as solutions for my design:
1. have everything handled by one main.py file (which decides whether
or not it should really handle it or just decline and have apache take
over and which redirects urls for a directory e.g.
www.myserver.com/folder to var/www/folder/index.html internally if that
index.html is present)
2. use two phases: transhandler and handler. Have transhandler find out
if the file (or directory) exists, and if not checks my database if it
can serve a virtual file or directory index and makes the req.filename
become a main.py to be handled in the second phase.
>
> For an internal redirect, you probably want:
>
> req.internal_redirect(req.uri+'/index.html')
>
> This will not send a response back to the browser and it will managed
> internal
> to Apache.
Question I now have: does anybody know how efficient this internal
redirect would be in comparison to a database query?
For the point is, that with option 1, all the static directories
(requests for www.myserver.com/folder) will go through apache twice:
(It first is handled by handler in main.py which then decides it should
be www.myserver.com/folder/index.html anyway.
How economically inefficient is that performance wise?
The alternative, option 2, has the downside of two database queries for
every dynamic page: First transhandler checks whether the url exists in
the database. Then later, handler again queries the database for this
url.
Is one of these alternatives much more performance intensive than the
other?
I know I am comparing apples with pears here. The one is an internal
redirect handled between mod_python and apache. The other is a database
query handled my MySQL and MySQLdb (which is also dependent to how the
database is designed and which field are indexed and so on...). Further
more the decision between the two options is also dependent on how many
these scenarios occur: do I have a lot of static index.html files which
are requested by only their directory, or do I serve mostly dynamic
pages.
So indeed the decision won't be just a matter of comparing performances
of the two, but if someone can just give me a "handle"...
Sorry for asking so many questions ...
dirk
-----------------------------
Dirk van Oosterbosch
dirk at ixopusada.com
-----------------------------
|