将http请求的副本转发到另一个(测试)环境

时间:2010-03-03 06:16:28

标签: django deployment production-environment duplicate-data test-environments

我希望我的网络应用程序的所有生产数据也流经我的测试环境。基本上,我想将生产站点的每个http请求转发到测试站点(并且生产网站也提供它!)。

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

1 个答案:

答案 0 :(得分: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(...)

对于代码重用,请考虑装饰器