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 <?...?>