代码之家  ›  专栏  ›  技术社区  ›  cethegeek

如何在Windows上运行Django并处理Apache没有守护程序模式的问题?

  •  0
  • cethegeek  · 技术社区  · 16 年前

    这开始是为了寻找在Linux上运行Django、通过Django PyODBC访问SQL Server以及在Windows上运行Django的安装中同样出色地支持Unicode的其他建议。

    未能在Linux中为ODBC驱动程序提供与Windows ODBC驱动程序相同级别的Unicode支持的良好解决方案;这个问题演变为应对Windows中没有Apache守护程序模式的负面影响。

    如果在Windows上运行Apache+mod_wsgi,则每次部署新的Django代码时,都需要重新启动Apache服务器。看见 Graham's answer 有关原因的详细信息。

    问题

    smart-quotes

    在SQLServer2005上运行Django需要使用Django-PyODBC。它在Windows/Linux/Mac OS X上运行良好;但是,如果您需要unicode支持,那么在Linux/Mac OS X上就不走运了——Unix中SQL Server的ODBC驱动程序正处于unicode遵从性的不同阶段。 FreeTDS ,开源驱动程序,如果指定UTF-8(*)的客户端字符编码,则可用于某些字符;但不支持所有字符。

    在我们的测试中,在Windows 2003上运行Django并使用Microsoft ODBC驱动程序,允许我们正确插入/更新/选择几种不同语言中的任何字符,以及Office应用程序中的Microsoft智能字符。


    client charset

    [a_db_server]
        host = a_db_server
        port = 1433
        tds version = 8.0
        client charset  = UTF-8
    
    2 回复  |  直到 9 年前
        1
  •  2
  •   Community Mohan Dere    9 年前

    关于使用Apache/mod_wsgi时在Windows上重新加载,请阅读我对以下内容的回复:

    Server software choice for Django live/staging

        2
  •  0
  •   cethegeek    16 年前


    首先也是最重要的一点:我们放弃了寻找一个ODBC驱动程序,该驱动程序可以与PyODBC一起正常工作,并且可以像Microsoft原生ODBC驱动程序一样支持unicode。FreeTDS部分起作用,一些商业司机在我们的测试中没有做到这一点。我们考虑过ODBC-JDBC桥,但从未真正测试过它。

    我们还考虑使用 ODBC router ,但考虑到多用户解决方案的价格、更复杂的可能性以及Django应用程序的低负载情况;我们决定坚持在Windows上运行Django,并尝试在每次部署新版本的Django应用程序时重新启动Apache服务器。

    我们如何应对Apache重启并仍然提供服务可用性:

    • 我们部署了一个 Apache server as a proxy/load-balancer
    • 在集群中的每个Windows Apache服务器上,我们都运行着所有Django应用程序
    • 当必须将新代码部署到服务器时,我们:
      • 通过Apache的balancer manager界面禁用群集中的一台服务器
      • 应用更新并在已禁用的服务器中安装任何新的Django应用程序
      • 在禁用的服务器中测试修改
      • 通过Apache的balancer manager接口重新启用集群中的服务器
      • 对第二台服务器执行相同的步骤

    只要集群中的一台服务器已启用并正在运行,我们的用户就可以使用应用程序和服务—无中断。同时,我们获得了一些负载平衡(在我们的例子中,我们现在真的不需要它)。

    代理Apache服务器重写所有重定向和cookie响应头,因此只要人们通过代理访问服务,Django代码中就不需要任何修改。