4

我希望我的web-app的所有生产数据也能流经我的测试环境。实质上,我希望将生产站点的每个http请求转发到测试站点(并且还有生产网站提供它!)。将http请求的副本转发到另一个(测试)环境

这样做的好方法是什么?我的网站是用Django构建的,由mod_wsgi提供服务。这最好在应用程序级别(Django),Web服务器级别(Apache)还是mod_wsgi级别实现?

+0

所以每次有人打你的生产现场,您希望转发请求你的测试网站?我很好奇,为什么? – 2010-03-03 07:54:17

+0

是的。我希望将新功能部署到测试环境,在这些环境中,我可以在实际将其部署到生产环境之前获取有关生产数据执行情况的指标。我*想*我将尝试在为我的应用程序提供服务的wsgi脚本中执行此操作,并了解它是如何实现的。我会尝试一些事情,并在这里发布有关什么可行(或不可行)的内容。 – raviv 2010-03-05 08:24:03

+0

你最终弄清楚如何做到这一点? – 2011-01-16 17:18:08

回答

7

我设法转发这样

def view(request): 
    # do what you planned to do here 
    ... 

    # processing headers 
    def format_header_name(name): 
     return "-".join([ x[0].upper()+x[1:] for x in name[5:].lower().split("_") ]) 
    headers = dict([ (format_header_name(k),v) for k,v in request.META.items() if k.startswith("HTTP_") ]) 
    headers["Cookie"] = "; ".join([ k+"="+v for k,v in request.COOKIES.items()]) 

    # this conversion is needed to avoid http://bugs.python.org/issue12398 
    url = str(request.get_full_path()) 

    # forward the request to SERVER_DOMAIN 
    conn = httplib.HTTPConnection("SERVER_DOMAIN") 
    conn.request(
     request.method, 
     url, 
     request.raw_post_data, 
     headers 
    ) 
    response = conn.getresponse() 

    # some error handling if needed 
    if response.status != 200: 
     ... 

    # render web page as usual 
    return render_to_response(...) 

代码重用的要求,考虑装饰

相关问题