I had another idea which is a simplification on my first one : an
action acting like a proxy on the php server.
I just wrote a little POC that seems to work.  Here are the few lines
to put in a controller:

import urllib

def make_get_stuff(an_url):
    def get_stuff():
        stuff=urllib.urlopen(an_url)
        return stuff.read(),stuff.info(),stuff.getcode()
    return get_stuff

HEADER_TAGS_TO_COPY=("Content-Type","Date","Accept-Ranges","Content-
Length",
                     "Etag","Last-Modified","Server","X-Powered-By")

def proxy():
    stuff_url="http://www.mysite.be/%s?%s"; % (request.url[22:],
request.env.query_string)
    stuff_content,stuff_info, stuff_status=cache.ram(stuff_url,
             lambda: cache.disk(stuff_url,
 
make_get_stuff(stuff_url),time_expire=None),time_expire=40)
    for header_tag in HEADER_TAGS_TO_COPY:
        header_line=stuff_info.getheader(header_tag)
        if header_line: response.headers[header_tag]=header_line
    response.status=stuff_status
    return stuff_content

And I have obviously to write some lines in routes.py like (the proxy
action is in the w.py controller of the poc app):

(r'.*:http://.*:.* /(?P<any>(?:admin/|poc/).*)',
r'/\g<any>'),
(r'.*:http://.*:.* /(?P<any>.*)',
r'/poc/w/proxy/vars=\g<any>'), # I think that's not used

That seems do the job (and it's quite faaaaaaaast ;-)  ).  I can even
crawl the old website and it will stand entirely in the cache, I would
then be able to shut down the php server (providing I manage the 4xx
errors myself)

Some questions about that solution:
- are there any drawbacks that I don't see ? (except that the cache
MUST be managed).
- what are the headers lines that are better to be copied from the php
response ? I guess that the only criterion is to please Google and I
have few clues about their likes and dislikes.  Content-Type must be
copied, that's for sure, for the others, I don't know and for the ones
added by web2py : Set-Cookie (session.forget ?), Pragma, Cache-
Control, ... I don't know if it's better to keep them or not : I don't
want to foolish Google in a way or another.
- I could replace the cache (or add that to it) by using the db (mysql
in prod) to store of the old php site stuffs (pages, images,
ppt, ...). Any advice ?

Best wishes everybody and thx to all of you : OSS is great, web2py is
huge and that community is soooooooo cool !



On Dec 30 2010, 6:07 pm, mdipierro <mdipie...@cs.depaul.edu> wrote:
> > My main concerns about this way are:
> > - the complexity of having runphp working
>
> there is no complexity but it is reeeeally slow.
>
> > - the work on the templates : I guess that I have to put thephp
> > templates in the view folder but I don't see exactly what else I have
> > to do on them
>
> Or move them in views/phpand make a web2py controllerphp.py with one
> action for each file . wiht the instructions above you will be able to
> inject both web2py tags {{...}} andphptags <?...?>
>
> > - do I have to tweak routes.py ? in the same way as above ?
>
> It depends on the original files. Probably yes.
>
> Why not look at this first:
>
> http://www.web2py.com/php

Reply via email to