Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/django/20.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/sql-server-2005/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何在Windows上运行Django并处理Apache没有守护程序模式的问题? 这个问题的演变_Django_Sql Server 2005_Unicode_Freetds_Django Pyodbc - Fatal编程技术网

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

如何在Windows上运行Django并处理Apache没有守护程序模式的问题? 这个问题的演变,django,sql-server-2005,unicode,freetds,django-pyodbc,Django,Sql Server 2005,Unicode,Freetds,Django Pyodbc,这开始是为了寻找在Linux上运行Django、通过Django PyODBC访问SQL Server以及在Windows上运行Django的安装中同样出色地支持Unicode的其他建议 未能在Linux中为ODBC驱动程序提供与Windows ODBC驱动程序相同级别的Unicode支持的良好解决方案;这个问题演变为应对Windows中没有Apache守护程序模式的负面影响 问题 如果在Windows上运行Apache+mod_wsgi,则每次部署新的Django代码时,都需要重新启动Apac

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

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

问题 如果在Windows上运行Apache+mod_wsgi,则每次部署新的Django代码时,都需要重新启动Apache服务器。有关原因的详细信息,请参阅

当您可能需要重新启动Apache时,如何运行一组可靠的应用程序和服务,直到Apache完全重新启动才拒绝服务

问题 我们使用SQL Server 2005,需要支持unicode字符和Microsoft Office应用程序中生成的某些字符(如)

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

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

但在Windows上运行意味着每次我们部署新代码时都需要跳转Apache,这意味着几秒钟内没有服务


(*)坦白地说,我们能够让某些字符被FreeTDS接受的唯一方法是在FreeTDS.conf中添加一个
客户端字符集
条目:

[a_db_server]
    host = a_db_server
    port = 1433
    tds version = 8.0
    client charset  = UTF-8

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


接受自己的答案可能不是一种好的形式,但它适合我们的情况,也可能帮助他人


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

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

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

  • 我们在一个由两台运行在Windows上的Apache服务器组成的集群上部署了一个
  • 在集群中的每个Windows Apache服务器上,我们都运行着所有Django应用程序
  • 当必须将新代码部署到服务器时,我们:
    • 通过Apache的balancer manager界面禁用群集中的一台服务器
    • 应用更新并在已禁用的服务器中安装任何新的Django应用程序
    • 在禁用的服务器中测试修改
    • 通过Apache的balancer manager接口重新启用集群中的服务器
    • 对第二台服务器执行相同的步骤
只要集群中的一台服务器已启用并正在运行,我们的用户就可以使用应用程序和服务—无中断。同时,我们获得了一些负载平衡(在我们的例子中,我们现在真的不需要它)


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

谢谢Graham。这正是我所想的。